git合并后分支的变化

mrb*_*chi 1 git merge branch github

我有两个分支,foo并且barmaster一个项目,我用git管理。假设我在foo它下工作,完成后,我将更改与master. 然后我去bar重复这个过程。但是后来有人告诉我有一些事情我必须改变foo,所以我的第一个想法是再次重复,但后来我失去了在bar分支下完成的所有工作。我如何实现返回分支的目的,然后当我与分支合并时,master我不会覆盖在下所做的更改bar

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

ash*_*oli 5

用一系列图表回答:

——

提交后创建foobar关闭masterC:

                       foo
                      /
master A ---- B ---- C
                      \
                       bar
Run Code Online (Sandbox Code Playgroud)

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

foo                    D ---- E ---- F
                      /               \ (merge-commit)
master A ---- B ---- C --------------- G 
                      \
                       bar
Run Code Online (Sandbox Code Playgroud)

同时,bar独立进步..

foo                    D ---- E ---- F
                      /               \
master A ---- B ---- C --------------- G 
                      \
bar                    D' ---- E' ----- F'
Run Code Online (Sandbox Code Playgroud)

你现在想更新bar与变化mastergit pull origin master

foo                    D ---- E ----------- F
                      /                      \
master A ---- B ---- C ---------------------- G 
                      \                        \
bar                    D' ---- E' ----- F' ---- G' (another merge-commit)
Run Code Online (Sandbox Code Playgroud)

提交的另一个更改 foo

foo                    D ---- E ----------- F ---- H
                      /                      \
master A ---- B ---- C ---------------------- G 
                      \                        \
bar                    D' ---- E' ----- F' ---- G'
Run Code Online (Sandbox Code Playgroud)

然后,bar与 new 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) 
Run Code Online (Sandbox Code Playgroud)

然后合并barmastermaster作为活动分支,git merge bar

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