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

Git 我应该将master合并到一个分支中,然后再合并回master吗?,git,branch,git-merge,Git,Branch,Git Merge,我有以下分支机构: master test1,它是从master test2,它也是从master创建的 我在test1分支上做了多次提交,而且,自从我创建了test1分支以来,我在master上创建了多次提交 还有关于test2的提交,我打算稍后将其合并回master 现在的想法是,我需要从master进行更改,如果可能,还需要从test1上的test2进行更改 我想知道是否可以将master合并到TEST1,因此我在test上从master获得提交,在TEST1上完成我的功能后,再次将其

我有以下分支机构:

  • master
  • test1
    ,它是从
    master
  • test2
    ,它也是从
    master
    创建的
我在
test1
分支上做了多次提交,而且,自从我创建了
test1
分支以来,我在
master
上创建了多次提交

还有关于
test2
的提交,我打算稍后将其合并回
master

现在的想法是,我需要从
master
进行更改,如果可能,还需要从
test1
上的
test2
进行更改

我想知道是否可以将
master
合并到
TEST1
,因此我在
test
上从
master
获得提交,在
TEST1
上完成我的功能后,再次将其合并到
master
。可能吗?还是会引发冲突

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

Git会理解一些提交已经合并到正在合并的分支中吗

我想知道我是否可以将MASTER合并到TEST1中,所以我在测试中得到MASTER的提交,在我在TEST1中完成我的特性之后,再次将其合并到MASTER中。可能吗?还是会引发冲突

就是这样做的。当您将master合并到test1中时,您可能会遇到冲突,必须手动解决。之后,您应该能够将test1合并到master中,而不会发生冲突

如果可能的话,是否也可以将test2合并到test1中,下一次将test2合并到master中,下一次将test1合并到master中

这是可能的,但不可取。相反,将master合并到test2中,然后将test2返回到master。(与您对test1所做的相同。)

在此之后,所有更改都应保存在master中。

git会理解一些提交已经合并到正在合并的分支中吗


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

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

git checkout test1
git rebase master
此时,您将了解master的最新情况,并在test1上进行提交

rebase
将执行以下操作:

git checkout test1
git rebase master
  • 选择test1上与主节点不同的点后的所有提交,并将其放入临时区域
  • 从master中选择与test1不同的点之后的所有提交,并将它们带到test1。此时,两个分支都是最新的
  • 然后,它将从临时区域获取test1提交,并将它们应用到test1之上。此时,test1将是master的最新版本,并将其提交放在最上面。 当它发生时,任何可能存在的冲突都会出现,你可以解决它们
在此之后,合并回master将是一个快速的过程

git checkout master
git merge test1
我喜欢这种方法的以下几点:

git checkout test1
git rebase master
  • 很简单
  • 使您能够轻松了解分支机构的最新情况
  • 消除合并提交,因为冲突在重定基础时得到解决
我已经用了很长一段时间了,它似乎符合你想要实现的目标


关于重新基化工作原理的详细说明也可能会有所帮助。

相关:test1和test2都由远程存储库跟踪(包括所有提交),我听说为在远程存储库上有提交的分支执行重新基化不是一个好主意?是的,除非您在推送之前执行所有这些操作,这是一个好主意。一点问题也没有。尝试一个小项目,看看它是否适合你。今天我对get-rebase有一些奇怪的体验。想象一下,我在主分支中有版本1,然后在功能分支中,我依次将应用程序升级到v2、3和4(这就是它位于功能分支头部的位置)。现在,我正在做git rebase master,获取冲突(比如,关于“从v1升级到v2”提交),我看到了什么??“传入更改:v2”(okey)。“当前更改:v4”…什么?我在这里该怎么办?我希望我所有的功能分支提交都回滚到“分支点”,然后移动到master的当前头部,并在其上重新应用功能提交…@pilat我明白了,也许这个链接有助于更好地说明和澄清您可能认同的场景:将master合并到feature branch而不是重定基址是一种不好的做法吗?我不喜欢重定基址,所以这个答案是+1。Basil,为什么您不愿意重新设置基址?将master/dev合并到feature中,并将feature合并回master/dev中是一个项目。通过这样做,您可以通过将这些更改从master/dev提交到您的分支来承担分支中的责任。然后,当合并回您的应用程序时,您正在“应用”您的工作+来自master/dev的此提交,这是您不应该拥有的。我个人发现这种方法是一种不好的做法,可能会导致代码丢失。如果您是唯一一个处理分支的人,那么只需重新设置基础,或者创建一个临时分支来选择分支的提交并在其上重置分支即可。@OlegG。我想我们需要在这里区分两种情况:将主功能合并到功能中,然后直接将功能分支合并回主功能中(最好是通过拉请求,可能包括删除分支),这是完全安全的,并且提供了完全可跟踪的历史,而不是重基(有时您被迫提供)。然而,将主机合并到中间的某个分支中,或者几次,很容易在合并回主机时引起麻烦,可能是由于您所说的代码意外丢失。