46 git
当我git merge从另一个分支到当前工作空间时,git有时会进行新的提交:
Merge remote-tracking branch xxx into xxx
Run Code Online (Sandbox Code Playgroud)
有时,它不会:
Fast-forward
... src files ...
Run Code Online (Sandbox Code Playgroud)
那么是什么决定了是否应该创建提交?
Geo*_*let 63
所谓的"快进"合并不会产生提交,而其他合并(通常称为"章鱼合并"(现在你知道为什么github的mascott是octocat))会产生提交.
基本上,当您的分支没有分歧时,会发生快进.
假设您要合并分支foo中的master分支.如果这些分支没有分歧,你会有这样的历史(每个*代表一个提交):
*---* (master)
\
*---*---* (foo)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,合并是快进的,因为(根据图论,这是git图的基础),master可以从中获得foo.换句话说,你只需要将master引用移动到foo,你就完成了:
*---*
\
*---*---* (master, foo)
Run Code Online (Sandbox Code Playgroud)
当你的分支分歧时:
*---*---* (master)
\
*---*---* (foo)
Run Code Online (Sandbox Code Playgroud)
您必须创建一个"加入"两个分支的提交:
?
*---*---*-------* (master)
\ /
*---*---* (foo)
Run Code Online (Sandbox Code Playgroud)
箭头指向的提交是合并提交,并且有两个父提交(前一个master分支提示和当前foo分支提示).
请注意,您可以强制Git为该--no-ff选项的快进合并创建合并提交.
我强烈建议您阅读http://think-like-a-git.net/,以便更好地理解图论如何应用于git(您不需要了解图论,您需要知道的一切是关于网站),这将使Git工作变得非常容易:)