Git合并相同和外部修改的文件

时间:2010-03-25 23:04:53

标签: git merge

我从开发人员和git继承了一些代码(来自zip文件) 逐步初始化,进行更改和一组签到。

现在,同一个开发人员发布了他的更改相同的代码并给了我 另一个zip文件。

我如何合并我的git repo和他最近的更改我的更改 从第二个zip文件内容?

理想情况下,我希望拥有应该对两者都严格的代码 我的更改和开发人员最近的更改。

我尝试从我的主分支创建分支b1并在其上应用第二个zip文件内容。将这些文件提交到分支机构并执行'git checkout master; git merge b1' - 但是,我没有得到我的更改,只有他在我的主分支中的更改。

2 个答案:

答案 0 :(得分:5)

听起来你和你的另一个基于你在存储库中作为root提交的代码所做的工作。所以现在你有了这个:

A - B - C - D (master)

其他开发人员的工作也基于提交A。因此,提交它的适当位置是A

首先在那里创建并签出一个分支:git checkout -b his_work <SHA1 of A>(或者在gitk中,只需右键单击提交并选择创建分支)。

接下来,转储他的工作,并提交它。为了好,你可以用git commit --author="His Name <his.email@somewhere>"来表明这是他的工作。

现在,查看您的主人(git checkout master)并合并他的分支(git merge his_work)。

你应该最终得到这个:

A - B - C - D - E (master)
 \             /
  X -----------
  (his_work)

只是为了解释,这是你做的:

A - B - C - D      -      X (his_work)
         (master) ----> 

你把他的作品放在你最近的作品之上,然后合并它;合并是一个快进:因为master是你合并的分支的祖先,你只需将master转移到新的提交。

答案 1 :(得分:1)

您只能进行更改的原因是您的分支基于最近的提交。然后,您用他的所有文件替换,并提交它。 Git认为这是一个大规模的编辑,用他的文件替换你的文件,而不是合并。

为了得到你想要的东西,你需要在与你的分开的地方分支。听起来这是你的第一次提交。所以你可以这样做:

git checkout <first-commit>
git checkout -b b1        // This just names the branch for the later merge
<copy his files from the zip in>
git checkout master
git merge b1

从这里开始,git看到b1基于第一次提交,因此它将master中的所有更改视为“并发”更改,这就是您想要的。