[英]Changes in branch after merge in git
在我用git管理的项目中,我在master
下有两个分支, foo
和bar
。 假设我在foo
下工作,并在完成后将更改与master
合并。 然后,我去bar
重复该过程。 但是后来有人告诉我,我必须在foo
上进行一些更改,所以我的第一个想法是重复一遍,但是后来我失去了在bar
分支下完成的所有工作。 我如何实现回到分支的目的,然后在与master
合并时不覆盖在bar
下所做的更改
我尝试为这些新更改创建一个新分支,但是如果采用这种方法,我会发现这些分支没有用。 但是我认为git很聪明,可以做我想要的事情。
回答一系列图表:
-
在提交C之后创建foo
并bar
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
来更新bar
( git 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
但理想情况下,如果您的foo
和bar
分支是一个功能/问题,则仅应在完成后将它们合并到master。 如果太大,则将其分解为较小的分支(蝶形或扁平形)。
我不会覆盖在bar下所做的更改
这取决于您的更改以及为什么要关心,无论如何您都要合并bar
分支以master
。 如果他所做的工作因功能/修复完成而被修改(这就是您将其合并的原因)而被修改,这与bar
业务无关。 实际上,当您完成了一个功能部件/修订版分支并合并了它的母版后,理想情况下您将其删除,因为它已经完成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.