`git pull --rebase --autostash` 和 `git pull --ff-only` 之间的区别?
Difference between `git pull --rebase --autostash` and `git pull --ff-only`?
以下问题 的解决方案同时使用:
git pull --rebase --autostash
git pull --ff-only
我对应该使用哪一个有点困惑。他们真的达到了同样的结果吗?非常相似 question 被问到哪个没有 --autostash
参数以及 --rebase
想象一下遥控器发生变化而您没有发生变化的情况:
remote | A - B - C - D - E
|
local | A - B - C
这里可以git pull --ff-only
,因为可以fast-forward从C
到E
。现在假设您还进行了更改:
remote | A - B - C - D - E
|
local | A - B - C - F - G
如果你git pull --ff-only
,会被拒绝,因为你不能fast-forward从G
到E
;每 the docs(强调我的):
With --ff-only
, resolve the merge as a fast-forward when possible.
When not possible, refuse to merge and exit with a non-zero status.
有两种方法可以解决这个问题:
- 创建合并提交(如果 fast-forward 不可能,则默认设置,或者可以使用
--no-ff
强制执行);或
- 变基(
--rebase
)。
如果您 git pull --rebase
,它会将您的本地副本回滚到 C
,fast-forward 回滚到 E
,然后重播 F
和 G
到新的 parent,留下:
remote | A - B - C - D - E
|
local | A - B - C - D - E - F' - G'
--autostash
是一个 单独的 参数,根据 the docs:
This means that you can run the operation on a dirty worktree.
在上面的两种情况下,我假设一个干净的工作树(即 git status
显示 “没有什么可提交的,工作树是干净的” - 你没有未提交的本地更改),为简单起见,但有时您可能希望在进行本地工作时进行新更改。
以下问题
git pull --rebase --autostash
git pull --ff-only
我对应该使用哪一个有点困惑。他们真的达到了同样的结果吗?非常相似 question 被问到哪个没有 --autostash
参数以及 --rebase
想象一下遥控器发生变化而您没有发生变化的情况:
remote | A - B - C - D - E
|
local | A - B - C
这里可以git pull --ff-only
,因为可以fast-forward从C
到E
。现在假设您还进行了更改:
remote | A - B - C - D - E
|
local | A - B - C - F - G
如果你git pull --ff-only
,会被拒绝,因为你不能fast-forward从G
到E
;每 the docs(强调我的):
With
--ff-only
, resolve the merge as a fast-forward when possible. When not possible, refuse to merge and exit with a non-zero status.
有两种方法可以解决这个问题:
- 创建合并提交(如果 fast-forward 不可能,则默认设置,或者可以使用
--no-ff
强制执行);或 - 变基(
--rebase
)。
如果您 git pull --rebase
,它会将您的本地副本回滚到 C
,fast-forward 回滚到 E
,然后重播 F
和 G
到新的 parent,留下:
remote | A - B - C - D - E
|
local | A - B - C - D - E - F' - G'
--autostash
是一个 单独的 参数,根据 the docs:
This means that you can run the operation on a dirty worktree.
在上面的两种情况下,我假设一个干净的工作树(即 git status
显示 “没有什么可提交的,工作树是干净的” - 你没有未提交的本地更改),为简单起见,但有时您可能希望在进行本地工作时进行新更改。