2013-02-24 19 views
2

問題是,在4周的時間內,我在兩個不同的位置開發了一個項目。此時我在硬盤上有兩個不同的目錄,每個目錄都包含提供所有提交的.git文件夾。git logic missing

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/pastefolderTwo內容到folderOne,但我知道這是不正確的做法。

你能告訴我如何得到A - B - X .. - C .. G

也請隨時批評我的邏輯。

回答

1

假設兩個存儲庫中的A和B實際上是相同的(如同一個提交ID),那麼我會採取另一種方式。然後

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

,我會使用衍合:我會取folderOne的支進folderTwo

git rebase master folderOne-master 

這應該重播在當前主的頂部folderOne大師提交,照顧到因爲它們是共同的,所以請單獨留下A和B.這一步後,folderOne-master應該有圖:

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

現在,確保你在大師folderTwo,併合並folderOne-master分支:

git checkout master 
git merge folderOne-master 

最後的命令應該做一個快向前合併,你應該看到你所要求的線性歷史記錄。

只是要清楚,如果你真的想要的內容是什麼,而不必在乎一個線性的歷史,那麼你可以這樣做,而不是:

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

要使用什麼是GIT衍合功能:http://git-scm.com/book/en/Git-Branching-Rebasing

您應該能夠從一個文件夾的變化推入兩個文件夾。那麼你應該最終得到一個倉庫,代碼在提交B之後分支,一個倉庫是C - D - E - F - G,另一個倉庫是X - Y - Z

然後,您可以在提交Z之後重新綁定以提交C開頭的分支,從而生成一個單獨的分支,然後您可以使用該分支。