git pull --rebase 和 git pull --ff-only 的区别

222
假设origin/master有提交,而我的local/master有提交。
使用 git pull --rebase 会发生什么?
使用git pull --ff-only会发生什么?
结果提交树上是否有任何差异?
1个回答

246

如果我使用git pull --rebase会发生什么?

git pull --rebase 大致相当于

git fetch
git rebase origin/master

即,您的远程更改 (C) 将在本地更改 (D) 之前应用,导致以下树形结构:

A -- B -- C -- D

如果我使用 git pull --ff-only,会发生什么?

它会失败。

git pull --ff-only 对应于

git fetch
git merge --ff-only origin/master

--ff-only 选项只有在远程分支可以进行快进合并时才应用远程更改。来自 man 手册的描述:

拒绝合并,并以非零状态退出,除非当前 HEAD 已经是最新的,或者合并可以解析为一个快进合并

由于您的本地分支和远程分支已经分叉,它们不能通过快进合并解决,使用 git pull --ff-only 将失败。


4
如果本地更改中没有提交 D ,会发生什么?这两个命令是否等价? - Nico
16
是的,它们都会导致 A--B--C 的结果。 - Gabriele Petronella
3
假设存在C和D,git pull --rebase --ff-only会做什么? - Refael Ackermann
8
如果使用 --rebase 选项,那么 --ff-only 选项将被忽略。 - Gabriele Petronella
13
如果想保证历史记录的线性,使用@BreakingBenjamin是很有用的。默认情况下,pull会引入合并提交,而你可能更喜欢仅使用rebase和ff进行工作。 - Gabriele Petronella
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接