2

问题是在 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.

也请随时批评我的逻辑。

4

2 回答 2

1

您要使用的是 GIT Rebasing 功能:http ://git-scm.com/book/en/Git-Branching-Rebasing

您应该能够将更改从文件夹一推送到文件夹二。然后,您应该最终得到一个存储库,其中代码在提交后分支B,一个与C - D - E - F - G另一个与X - Y - Z.

然后,您可以在提交 Z 之后从提交 C 开始对分支进行 rebase,从而生成一个您可以从中工作的分支。

于 2013-02-24T10:27:57.463 回答
1

假设两个存储库中的 A 和 B 实际上是相同的(就像在同一个提交 id 中一样),那么我将采用另一种方式。我会将 fetchfolderOne的分支放入folderTwo

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

然后,我会使用变基:

git rebase master folderOne-master

这应该在folderOne当前 master 之上重放 master 中的提交,注意不要让 A 和 B 单独存在,因为它们是共同的。在这一步之后,folderOne-master应该有图表:

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

现在,确保您在 master in 上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 回答