事情是,在4周的时间里,我在两个不同的地方开发了一个项目。此时我的硬盘上有两个不同的目录,每个目录都包含所有提交的.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
folderTwo
内容folderOne
的内容,但我知道这不是正确的方法。
您能告诉我如何获得A - B - X .. - C .. G
。
也请随意批评我的逻辑。
答案 0 :(得分:1)
您想要使用的是GIT重新定位功能:http://git-scm.com/book/en/Git-Branching-Rebasing
您应该能够将更改从文件夹一推入文件夹二。然后你应该得到一个存储库,其中代码在提交B
后分支,一个用C - D - E - F - G
,另一个用X - Y - Z
。
然后你可以在提交Z之后从提交C开始重新分支分支,从而产生一个分支,然后你可以使用它。
答案 1 :(得分:1)
假设两个存储库中的A和B实际上是相同的(如同一个提交ID),那么我会采用另一种方式。我会将folderOne
的分支取为folderTwo
:
git fetch /path/to/folderOne master:folderOne-master
然后,我会使用rebase:
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