一、快进的概念
git的快进(fast-forward)指的是合并两个分支时,如果被合并的分支的最新提交所指向的提交(head)是当前分支所指向的提交的直接祖先,就可以直接将当前分支所指向的提交更新为被合并分支最新提交所指向的提交,这个过程是不需要执行实际合并操作的。这样的提交过程称为快进。
假设当前分支为master,被合并的分支为new_branch。执行git merge new_branch操作,如果new_branch的最新提交为5,而master的最新提交为4,那么git可以直接将master分支所指向的提交更新为最新提交5,这个更新的过程就是一个快进过程。
如果被合并分支的最新提交不是当前分支所指向的提交的直接祖先,就需要执行实际的合并操作,这个过程称为非快进合并,它会新建一个额外的提交,将两个分支的不同点合并到一起。
二、noteaboutfast-forwards的作用
有些情况下,由于特殊原因,快进操作不一定是一个好的选择。例如,多个人同时修改了同一文件的相同区域,git会提示合并冲突。此时如果强行执行快进操作,那么会造成丢失部分修改记录。
在这种情况下,我们可以在执行合并操作时使用--no-ff选项,例如git merge --no-ff branch1。这个选项会将新建的合并提交中的内容包含所有的分支历史记录,不会执行快进操作,这个提交是一个新的节点,而不是原来的某个节点。
此时,如果需要查看历史记录,就需要借助于noteaboutfast-forwards,这个命令会显示所有被快进合并的信息,包括所有被快进的合并提交的父提交,也就是显示被快进的历史记录。
三、noteaboutfast-forwards的用法
使用noteaboutfast-forwards命令的方法非常简单,只需要在git命令行中执行git noteaboutfast-forwards即可。
四、代码示例
$ git merge --no-ff branch1 Merge made by recursive. file.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 file.txt $ git noteaboutfast-forwards e1df86da60abaae1772df1c764db541f169f871f merges branch1 into master: Fast-forward $ git log --oneline --decorate --graph --all * 8b3aaa0 (HEAD -> master) Merge branch 'branch1' into master |\ | * 79dbd0d (branch1) add feature 1 * | e1df86d (origin/master, origin/HEAD) merges branch1 into master: Fast-forward |\ \ | |/ |/| * | b3846a2 add feature 3 |/ * e4539c1 add feature 2