git rebase
联机帮助页显示:
如果未指定
<upstream>
,则将使用branch.<name>.remote
和branch.<name>.merge
选项中配置的上游;[...]
然后,先前保存到临时区域的提交将按顺序逐个重新应用于当前分支。请注意,
HEAD
中引入与HEAD..<upstream>
中的提交相同的文本更改的任何提交都将被省略(即,将跳过已使用不同提交消息或时间戳的上游接受的修补程序)。
事实上,当我调用git rebase master
并且master
中的提交具有与我本地分支历史记录相同的文本更改时,它将被忽略。但是,我发现当我在没有指定git rebase
(默认为<upstream>
)的情况下调用master
时,git rebase
的输出似乎显示相同的提交不存在忽略。
这是一个证明这一点的例子。这是git历史:
A---B master
\
B' topic
B
和B'
引入相同的文本更改,但具有不同的提交消息。 topic
已设置为跟踪master
。
首先,我在提供topic
时重新<upstream>
:
$ git checkout topic
$ git rebase master
First, rewinding head to replay your work on top of it...
正如预期的那样,没有任何事情发生,因为B
和B'
是差异相同的。
但是,如果我省略<upstream>
:
$ git checkout topic
$ git rebase
First, rewinding head to replay your work on top of it...
Applying: Branch: topic
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
No changes -- Patch already applied.
似乎git在第二个输出中没有跳过B'
。有人可以解释一下这种差异吗?
(我使用git版本1.9.4)