我应该将 master 合并到一个分支,然后再合并回 master 吗?

Should I merge master into a branch, and then merge back into master?

我有以下分支:

我在 test1 分支上完成了多次提交,而且,自从我创建了 test1 分支后,我在 master.[=35 上创建了多次提交=]

test2 上也有提交,我打算稍后将其合并回 master

现在的事情是我需要从 master 进行更改,如果可能的话,从 test2test1

我想知道我是否可以将 master 合并到 test1,所以我在 test 上从 master 获得提交,并且在我完成我的功能后test1,再次合并到 master。那可能吗?还是会引发矛盾?

是否可以将 test2 合并到 test1,然后将 test2 合并到 master,最后将 test1 合并到 master?

Git 是否理解某些提交已经合并到正在合并的分支中?

I want to know if I can merge MASTER into TEST1, so I get the commits from master on test, and after I finish my feature on test1, merge that again to MASTER. is that possible? or it will raise conflicts?

这正是它是如何完成的。当您将 master 合并到 test1 时,您可能会遇到冲突,您必须手动解决。之后你应该能够将 test1 合并到 master 中而不会发生冲突。

If thats possible, is possible to merge also test2 into test1, next merge test2 into master, and next merge test1 into master?

可以,但不可取。而是将 master 合并到 test2,然后将 test2 合并回 master。 (与您对 test1 所做的相同。)

在此之后,您的所有更改都应该在 master 中。

Will git understand that some commits are already merged into the branch that is being merged?

是的,与 SVN 不同,Git 知道此类提交。

要始终保持最新状态并且在合并回它时不引发冲突,您可以执行以下操作:

git checkout test1
git rebase master

此时您将与 master 保持同步,并在其之上的 test1 上提交您的提交。

rebase 会执行以下操作:

  • 在与 master 不同的点之后选择 test1 上的所有提交并放入临时区域。
  • 在与 test1 不同的点之后从 master 中挑选所有提交并将它们带到 test1。此时两个分支都是最新的。
  • 然后它将从临时区域中获取 test1 提交并将它们应用到 test1 之上。此时 test1 将与 master 保持同步,并将其提交放在首位。 当它发生时,任何可能存在的冲突都会显示出来,你可以解决它们。

在此之后,合并回 master 将是一个快进。

git checkout master
git merge test1

我喜欢这种方法的地方如下:

  • 很简单。
  • 轻松了解分支机构的最新动态。
  • 消除合并提交,因为冲突是在变基时解决的。

我已经应用了很长一段时间,它似乎符合你想要完成的目标。

关于变基如何工作的 visual explanation 可能也会有所帮助。