当您从一个分支(比如说“主题”)中选择一个提交到另一个分支(让我们称之为“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'?
答案 0 :(得分:27)
答案在git-rebase的手册页中:
请注意,HEAD中引入与HEAD中的提交相同的文本更改的任何提交都将被省略(即,将跳过已使用不同提交消息或时间戳的上游接受的修补程序)。
Rebase查看文本更改,并拒绝重播该提交(如果它已存在于您正在重新定位到的分支上。