git逻辑缺失

时间:2013-02-24 10:21:14

标签: logic branch directory git-commit

事情是,在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

也请随意批评我的逻辑。

2 个答案:

答案 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