2

問題は、4 週間という期間で、2 つの異なる場所でプロジェクトを開発したことです。この時点で、HDD に 2 つの異なるディレクトリがあり、それぞれにすべてのコミットを含む .git フォルダーが含まれています。

私はそのfolderOneようなものを持っています:私は次のコミットを持っています
A - B - C - D - E - F - G
:folderTwo
A - B - X - Y - Z

必要なものは次のとおりです。
A - B - X - Y - Z - C - D - E - F - G

この時点で、頭を forlderOne からステージ B に移動する必要があることがわかります

git br gStage                # save the G stage into a branch  
git reset --hard HEAD~5      # move master on stage B

今、私の意図はcopy/pasteコンテンツを からfolderTwofolderOne移すことですが、これが正しい方法ではないことはわかっています。

の入手方法を教えてくださいA - B - X .. - C .. G

また、私の論理を自由に批判してください。

4

2 に答える 2

1

使用したいのは GIT Rebasing 関数です: http://git-scm.com/book/en/Git-Branching-Rebasing

変更をフォルダー 1 からフォルダー 2 にプッシュできるはずです。B次に、 commit 後にコードが分岐する 1 つのリポジトリ、1 つはC - D - E - F - Gで、もう1つは で終わるはずですX - Y - Z

次に、コミット Z の後にコミット C から始まるブランチをリベースできます。その結果、作業できる単一のブランチになります。

于 2013-02-24T10:27:57.463 に答える
1

両方のリポジトリの A と B が実際には同じであると仮定すると (同じコミット ID のように)、別の方法に進みます。folderOneのブランチを次の場所にフェッチしfolderTwoます。

git fetch /path/to/folderOne master:folderOne-master

次に、リベースを使用します。

git rebase master folderOne-master

folderOneA と B は共通であるため、A と B はそのままにしておくように注意しながら、現在のマスターの上で master のコミットを再生する必要があります。このステップの後folderOne-master、次のグラフが表示されます。

A - B - X - Y - Z - C - D - E - F - G

次に、 で master になっていることを確認し、ブランチfolderTwoをマージします。folderOne-master

git checkout master
git merge folderOne-master

最後のコマンドは早送りマージを実行する必要があり、要求した線形の履歴が表示されるはずです。

明確にするために、本当に必要なのはコンテンツであり、必ずしも線形の履歴を気にしない場合は、代わりにこれを行うことができます:

git fetch /path/to/folderOne master:folderOne-master
git merge folderOne-master
于 2013-02-24T10:36:05.853 に答える