34

当您从一个分支(比如“主题”)挑选一个提交到另一个(让我们称之为“主”)提交时,该提交的历史将被重写,它的哈希值发生变化,它实际上变成了一个新的、独立的提交。

但是,当您随后针对主 git 重新设置主题时,它足够聪明,知道不适用两次提交。

例子:

A --- B <- master
      \
       \---- C ---- D <- topic

$ git checkout master
$ git cherrypick D

A --- B --- D' <- master
      \
       \---- C ---- D <- topic

$ git checkout topic
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying 'C'

A --- B --- D' <- master
            \
             \---- C' <- topic

这个魔法是如何工作的?IE。git如何知道它应该将C应用于D',而不是D应用于D'?

4

1 回答 1

35

答案在git-rebase的手册页中:

请注意,HEAD 中引入与 HEAD.. 中的提交相同的文本更改的任何提交都将被忽略(即,将跳过已在上游接受的具有不同提交消息或时间戳的补丁)。

Rebase 查看文本更改,如果该提交已经存在于您要重新设置的分支上,则拒绝重播该提交。

于 2013-01-24T22:12:30.680 回答