主分支(已提交)更改后合并开发分支

3
我一直在一个名为“development”的分支上工作,同时另一个开发人员一直在master分支上进行更改(对master分支进行了多次提交)。
现在master分支中有一些我在development分支中没有的内容。
我能否合并development分支而不影响master分支中的新提交?即不覆盖master中的任何新工作?
如何处理这种情况是最佳实践?
4个回答

3
不,git的合并原则是累加的,您无法使用合并“覆盖”提交。
初始情况:
A---B---C---D <<< master
     \
      E---F <<< development <<< HEAD

你的同事已经提交了代码 CD。现在我们需要将 development 分支合并到 master 分支。

git checkout master
git merge development

A---B---C---D---G <<< development, master <<< HEAD
     \         /
      E-------F

此时,在你的development分支上做的提交可从任何一个分支都访问,但是提交CD仍然存在。

3
在“E”和“F”合并成“G”之后,“C”和“D”的内容仍然可用吗? - Will
1
@Will 是的。如果 E 和 F 中有任何冲突的修改,Git 将中断合并过程并让您手动处理它。 - Romain Valeri

2
假设你们正在项目的不同方面工作(根据你们的 IDE),你通常可以指定你想要提交/推送的文件。我建议先从master拉取,然后再复制你的更改并提交你的更改。然后创建一个 pull request 并合并分支。即使需要多几个步骤,使用 git 工作时,安全起见总是更好的选择。

0

处理本地工作区的另一种解决此问题的方法是变基您的本地分支。操作如下:

初始状态:

A---B---C---D <<< master
     \
      E---F <<< development <<< HEAD

在Rebasing之后,你的分支应该看起来像这样。如果出现合并冲突,你会看到它并可以在本地解决,然后像往常一样提交即可。

git rebase master
A---B---C---D <<< master
             \
              E---F <<< development <<< HEAD

请注意,您的分支尚未提交,只是与主分支保持同步。

0
我个人非常讨厌手动合并代码。我更喜欢先将主分支合并到我的开发分支中。这样,如果我搞砸了什么,结果的代码就在我的开发分支中,而不是在主分支中。这也有助于使代码审查(在我的情况下,在合并之前进行)对审阅者更加容易。
例如:
A---B---C---D---G <<< development, master <<< HEAD
 \          \   /
  -----E------F

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接