我在git管理的项目中的bar
下有两个分支master
和foo
。假设我在master
下工作,完成后,我将更改与bar
合并。然后我转到foo
并重复此过程。但是有人告诉我,我必须在bar
上更改一些内容,所以我的第一个想法是再次重复,但后来我失去了master
分支下完成的所有工作。如何实现回到分支机构的目的,然后当我与bar
合并时,我不会覆盖在{{1}}
我尝试为这些新的更改创建一个新的分支,但如果这是方法,我发现分支有点无用。但我认为git足够聪明,可以做我想做的事。
答案 0 :(得分:3)
回答一系列图表:
-
在提交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'
您现在希望更新bar
,更改为master
(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' ---
答案 1 :(得分:1)
然后我去吧并重复这个过程
为什么不在bar中合并master或foo?我不清楚这一点。
然后有人告诉我,我必须要改变foo,所以我的第一个想法是再次重复,但后来我失去了在bar分支下完成的所有工作。
重复是什么意思?提交最后一次更改并签出另一个分支。
此外,如果您进行的更改不会提交,则可以使用git stash临时存储更改。
请详细说明您的问题。
答案 2 :(得分:1)
如果您的foo
和bar
分支尚未删除,则可以重新定位
git checkout master
git pull
git checkout foo
git rebase master
git checkout bar
git rebase master
但理想情况下,如果您的foo
和bar
分支是一个功能/问题,那么只有在完成后才应将它们合并为主。如果它太大,则将其分解为较小的分支(nester或flat)。
我不会覆盖在bar
下所做的更改
这取决于您的更改以及为什么要谨慎,无论如何,您将bar
分支合并到master
。如果他完成的工作是修改因为该功能/修复已完成(这就是你合并它的原因),那就不是bar
业务。实际上,当你完成一个功能/修复分支并将其合并为主分支时,理想情况下你会删除它,因为它已经完成。