我知道在从远程获取提交之后,git fetch
总是在分支和它的远程跟踪之间进行快进合并。
我的问题涉及到一个场景,在这个场景中,我们将要求git fetch
进行非快进合并。有没有可能让git抓取非快进合并?如果不是,我该如何解决下面的场景?
我的本地代码库(进行了两次本地提交-C和B提交)
...--o--o--A <-- origin/master
\
C--B <-- master
之后,我运行git fetch (更新我的分支)
...--o--o--A-- D <-- origin/master (updated)
\
C--B <-- master
这里,origin/master
需要合并到master中,但这不会快进。git fetch
将失败。我不想强制获取,因为我不想丢失我的提交、C
和B
。
如何让git fetch进行非快进合并?如下所示:
...--o--o--A-- D --
\ \
\ F <-- master ,origin/master (updated) (my merge commit for non fast forward)
\ /
C--B
发布于 2018-06-01 03:46:23
在这里,源/主需要合并到主中,但这不会快进。git获取将失败。我不想强制获取,因为我不想丢失提交的C和B。
这就是为什么不应该使用git fetch
来更新当前分支的原因。将git pull
与merge或rebase一起使用。拥有
...--o--o--A <-- origin/master
\
C--B <-- master
您运行git pull origin master
并得到以下结果:
...--o--o--A-----D <-- origin/master
\ \
C--B--M <-- master
使用git pull --rebase origin master
,您可以做到这一点:
...--o--o--A--D <-- origin/master
\
C'--B' <-- master
(Rebase重写将C
和B
提交给C
和B
)。
我更喜欢总是使用rebase,所以我有这样的配置:
git config --global branch.autosetuprebase always
这使得git为每个新分支配置rebase。对于现有分支,更改为
git config branch.master.rebase true
https://stackoverflow.com/questions/50626560
复制相似问题