我们使用git merge remotes/MYSERVER/master命令之后。这里的merge是一个快进(fast-forward)merge(因为我们本地没有新的提交),唯一要做的就是移动“便条”master,相应的改变我们工作目录中的文件。 这里我们在本地进行了一次提交,之后进行了fetch操作。我们得到了一个本地commit一个远端commit。显然这里需要一次merge。 这是git merge remotes/MYSERVER/master之后的结果。因为我们有本地的提交,所以这次的merge不是快进式的。一个新的commit节点e被生成,它有两个父亲节点。 这是一些commit以及一次merge之后两个分支的情况。看这种”缝合”式的merge,可以看到git保存了所有“行为”(commit或者merge)的历史。 这种“缝合”(原文stitching)模式有时读起来比较冗长。如果你还没有发布你的分支,或者确定别人不会在你的分支之上进行开发,那么你可以选择rebase你的分支。这时,merge操作不会被执行,你的commit会被另外一个commit代替。这个commit和你的commit有不同的parent,如上图。你的分支也会被移到新的commit处。 你老的那个commit仍然会在有向无环图中,直到垃圾收集器回收。(Ignore them for now,but just know there’s a way out if you screwed up totally).注意如果你还有一个便条指向那个老的commit,它仍会继续指向这个commit,这会让这个commit永远存活下去。很令人困惑是吧。 |