当您从一个分支(比如说"主题")中选择一个提交到另一个分支(让我们称之为"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
Run Code Online (Sandbox Code Playgroud)
这个神奇的工作原理如何?IE浏览器.git如何知道它应该应用C到D',而不是D到D'?
Joh*_*ter 28
答案在git-rebase的手册页中:
请注意,HEAD中引入与HEAD中的提交相同的文本更改的任何提交都被省略(即,将跳过已使用不同提交消息或时间戳的上游接受的修补程序).
Rebase会查看文本更改,并拒绝重播该提交(如果它已存在于您要重新绑定到的分支上).