繁体   English   中英

git中合并后分支的变化

[英]Changes in branch after merge in git

在我用git管理的项目中,我在master下有两个分支, foobar 假设我在foo下工作,并在完成后将更改与master合并。 然后,我去bar重复该过程。 但是后来有人告诉我,我必须在foo上进行一些更改,所以我的第一个想法是重复一遍,但是后来我失去了在bar分支下完成的所有工作。 我如何实现回到分支的目的,然后在与master合并时不覆盖在bar下所做的更改

我尝试为这些新更改创建一个新分支,但是如果采用这种方法,我会发现这些分支没有用。 但是我认为git很聪明,可以做我想要的事情。

回答一系列图表:

-

在提交C之后创建foobar master

                       foo
                      /
master A ---- B ---- C
                      \
                       bar

foo工作并合并到master :( git checkout master && git merge foo

foo                    D ---- E ---- F
                      /               \ (merge-commit)
master A ---- B ---- C --------------- G 
                      \
                       bar

同时, bar独立发展。

foo                    D ---- E ---- F
                      /               \
master A ---- B ---- C --------------- G 
                      \
bar                    D' ---- E' ----- F'

您现在希望通过更改master来更新bargit pull origin master

foo                    D ---- E ----------- F
                      /                      \
master A ---- B ---- C ---------------------- G 
                      \                        \
bar                    D' ---- E' ----- F' ---- G' (another merge-commit)

foo提交的另一个更改

foo                    D ---- E ----------- F ---- H
                      /                      \
master A ---- B ---- C ---------------------- G 
                      \                        \
bar                    D' ---- E' ----- F' ---- G'

然后,将bar与新的foo同步( git checkout bar && git pull origin foo

foo                    D ---- E ----------- F ---- H
                      /                      \      \
master A ---- B ---- C ---------------------- G      \
                      \                        \      \
bar                    D' ---- E' ----- F' ---- G'---- H' (another merge-commit) 

然后将bar合并到master (将master作为活动分支, git merge bar

foo                    D ---- E ----------- F ---- H
                      /                      \      \
master A ---- B ---- C ---------------------- G -----}-------- I (latest merge-commit)
                      \                        \      \      /
bar                    D' ---- E' ----- F' ---- G'---- H' ---

然后我去酒吧重复一下过程

为什么不合并bar中的master或foo? 我不清楚。

但是后来有人告诉我,我必须在foo上进行一些更改,所以我的第一个想法是重复一遍,但是后来我失去了在bar分支下完成的所有工作。

重复是什么意思? 提交最后的更改并签出另一个分支。

另外,如果您进行了不提交的更改,则可以使用git stash临时存储更改。

请指定您的问题以获得更详细的帮助。

如果您的foo and bar分支尚未删除,则可以重新设置基准

git checkout master
git pull
git checkout foo
git rebase master
git checkout bar
git rebase master

但理想情况下,如果您的foobar分支是一个功能/问题,则仅应在完成后将它们合并到master。 如果太大,则将其分解为较小的分支(蝶形或扁平形)。

我不会覆盖在bar下所做的更改

这取决于您的更改以及为什么要关心,无论如何您都要合并bar分支以master 如果他所做的工作因功能/修复完成而被修改(这就是您将其合并的原因)而被修改,这与bar业务无关。 实际上,当您完成了一个功能部件/修订版分支并合并了它的母版后,理想情况下您将其删除,因为它已经完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM