在git中合并后分支的变化

时间:2017-03-14 12:57:01

标签: git github merge branch

我在git管理的项目中的bar下有两个分支masterfoo。假设我在master下工作,完成后,我将更改与bar合并。然后我转到foo并重复此过程。但是有人告诉我,我必须在bar上更改一些内容,所以我的第一个想法是再次重复,但后来我失去了master分支下完成的所有工作。如何实现回到分支机构的目的,然后当我与bar合并时,我不会覆盖在{{1}}

下所做的更改

我尝试为这些新的更改创建一个新的分支,但如果这是方法,我发现分支有点无用。但我认为git足够聪明,可以做我想做的事。

3 个答案:

答案 0 :(得分:3)

回答一系列图表:

-

在提交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'

您现在希望更新bar,更改为mastergit 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合并到mastermaster作为有效分支,git merge bar

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

答案 1 :(得分:1)

  

然后我去吧并重复这个过程

为什么不在bar中合并master或foo?我不清楚这一点。

  

然后有人告诉我,我必须要改变foo,所以我的第一个想法是再次重复,但后来我失去了在bar分支下完成的所有工作。

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

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

请详细说明您的问题。

答案 2 :(得分:1)

如果您的foobar分支尚未删除,则可以重新定位

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

但理想情况下,如果您的foobar分支是一个功能/问题,那么只有在完成后才应将它们合并为主。如果它太大,则将其分解为较小的分支(nester或flat)。

  

我不会覆盖在bar

下所做的更改

这取决于您的更改以及为什么要谨慎,无论如何,您将bar分支合并到master。如果他完成的工作是修改因为该功能/修复已完成(这就是你合并它的原因),那就不是bar业务。实际上,当你完成一个功能/修复分支并将其合并为主分支时,理想情况下你会删除它,因为它已经完成。