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

Nic*_*ico 77 git git-pull git-rebase

假设origin/master已经提交A--B--C并且我local/master已经提交了A--B--D.

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

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

生成的提交树有什么不同吗?

Gab*_*lla 102

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

git pull --rebase 大致相当于

git fetch
git rebase origin/master
Run Code Online (Sandbox Code Playgroud)

即你的远程change(C)将在本地更改(D)之前应用,从而产生以下树

A -- B -- C -- D
Run Code Online (Sandbox Code Playgroud)

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

它会失败.

git pull --ff-only 对应于

git fetch
git merge --ff-only origin/master
Run Code Online (Sandbox Code Playgroud)

--ff-only只有在可以快速转发时才应用远程更改.来自男人:

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

由于您的本地和远程分支机构已经出现分歧,因此无法通过快进解决,并且git pull --ff-only会失败.

  • 是的,他们都会导致'A - B - C`. (5认同)
  • `git pull --rebase --ff-only` 会做什么?(假设有C和D) (3认同)
  • @BreakingBenjamin如果你想保证线性历史,它很有用.默认情况下,`pull`可以引入合并提交,而您可能更喜欢使用rebase和ff. (3认同)
  • 如果本地更改中没有提交 `D` 会发生什么?这两个命令是等价的吗? (2认同)
  • IIRC与-rebase配对时,只会忽略--ff-only选项 (2认同)