我从开发人员和git继承了一些代码(来自zip文件) 逐步初始化,进行更改和一组签到。
现在,同一个开发人员发布了他的更改相同的代码并给了我 另一个zip文件。
我如何合并我的git repo和他最近的更改我的更改 从第二个zip文件内容?
理想情况下,我希望拥有应该对两者都严格的代码 我的更改和开发人员最近的更改。
我尝试从我的主分支创建分支b1并在其上应用第二个zip文件内容。将这些文件提交到分支机构并执行'git checkout master; git merge b1' - 但是,我没有得到我的更改,只有他在我的主分支中的更改。
答案 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中的所有更改视为“并发”更改,这就是您想要的。