【发布时间】:2015-04-14 15:26:39
【问题描述】:
我在一个分支上工作,foo。我没有未分级的更改,没有工作更改,完全干净的状态,根据我的盒子,HEAD == foo == origin/foo。
$ git status
# On branch foo
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# some_irrelevant_file_here
$ git log --pretty=...
* 456520c 2015-02-13 (HEAD, origin/foo, foo) Commit A
* 23bfcd1 2015-02-11 Commit B
* b0bdd18 2015-02-12 Commit C
然后我被要求查看同事推动的一些更改,所以我这样做了:
$ git pull --rebase origin foo
remote: Counting objects: 47, done.
remote: Compressing objects: 100% (34/34), done.
remote: Total 36 (delta 22), reused 0 (delta 0)
Unpacking objects: 100% (36/36), done.
From ...
* branch foo -> FETCH_HEAD
First, rewinding head to replay your work on top of it...
Fast-forwarded foo to 43dad88c737762e0f1e84fdcd135155080bdce2a.
此时,我的图表如下所示:
$ git log --pretty=...
* 43dad88 2015-02-13 (HEAD, foo) Commit D
* 40039f9 2015-02-13 Commit E
* 456520c 2015-02-13 (origin/foo) Commit A
* 23bfcd1 2015-02-11 Commit B
* b0bdd18 2015-02-12 Commit C
为什么我的本地foo 看起来比origin/foo 领先? D 和 E 都不是我的提交,我只是从 origin 中提取了这两个 - 我希望此时仍然有 HEAD == foo == origin/foo。
【问题讨论】:
-
“根据我的盒子”。你的盒子可能已经过时了。如果你先运行
git fetch origin foo会发生什么? -
@jurgemaister pull --rebase 隐式地进行提取。
-
@CodyStott 我们正在查看提交历史记录,而不是差异预览 - 我们已经通过了那个阶段。有一个
git pull --rebase origin foo,所以实际上是一个git fetch origin foo和一个git rebase origin/foo。提取已经发生。 -
@RobertBain 我知道
git pull做了什么。然而,我的评论是基于这样一个事实,即原始问题提到他“知道”他的本地人甚至在他提到做git pull之前使用远程之前。只要考虑一下他所说的顺序。 -
@CodyStott 在我看来这不是他所说的。我认为他是说他做了一个
git pull --rebase origin foo,这与git fetch origin foo和git rebase origin/foo相同。我很乐意在讨论中进一步讨论这个问题,或者也许只是让其他人提出他们的想法。
标签: git git-rebase