git pull --rebase和git pull --ff之间的区别


102

假设origin/masterhas commit A--B--C和my local/masterhas commit A--B--D

如果我使用会怎样git pull --rebase

如果我使用会怎样git pull --ff-only

生成的提交树有什么区别吗?

Answers:


126

如果我使用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仅在远程更改可以快速转发时才应用。从男人那里:

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

由于您的本地分支机构和远程分支机构存在分歧,因此无法通过快速转发解决它们,并且git pull --ff-only可能会失败。


如果D本地更改没有提交怎么办?这两个命令会等效吗?
Nico 2014年

7
是的,它们都会导致A--B--C
加布里埃尔·彼得罗内拉2014年

怎么git pull --rebase --ff-only办?(假设有C&D)
Refael Ackermann

2
IIRC与--rebase配对时仅--ff-only选项将被忽略
Gabriele Petronella

5
@BreakingBenjamin如果要保证线性历史记录,则很有用。默认情况下pull可以引入合并提交,而您可能更喜欢仅使用rebase和ff。
加布里埃尔·彼得罗内拉
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.