为什么在樱桃选择之后的反弹不能同时执行相同的提交?

时间:2013-01-24 20:11:50

标签: git

当您从一个分支(比如说“主题”)中选择一个提交到另一个分支(让我们称之为“master”)时,该提交的历史记录会被重写,其哈希值会发生变化,并且它实际上会成为一个新的独立提交。

然而,当你随后对master git进行rebase主题时,聪明到足以知道不要两次申请提交。

示例:

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'?

1 个答案:

答案 0 :(得分:27)

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

  

请注意,HEAD中引入与HEAD中的提交相同的文本更改的任何提交都将被省略(即,将跳过已使用不同提交消息或时间戳的上游接受的修补程序)。

Rebase查看文本更改,并拒绝重播该提交(如果它已存在于您正在重新定位到的分支上。

相关问题