原文:CS Visualized: Useful Git Commands
翻译:李中凯
虽然 Git 是一个强大的工具,但是我觉得大部分人都会同意我说的:它也可以是一个……噩梦!我一直觉得,使用 Git 的时候把操作过程在脑海里视觉化会非常有用:当我执行某个命令的时候,分支之间是如何交互的?又是如何影响提交历史的?当我在master
分支执行hard reset
、force push
到 origin
、在.git
文件夹执行rimraf
的时候,为什么我的同事都哭了?
我认为创建一些最常见、最实用的命令的可视化示例是最佳使用指南!接下来介绍的这些命令,很多都有可选参数,用于改变命令的行为。文中的示例只讨论命令的默认行为,不会涉及太多的配置选项。这些命令包括 merge
,rebase
,reset
, revert
,cherry-pick
,fetch
,pull
,reflog
等。
merge
多分支可以非常方便地将新的改动互相隔离,并确保你不会意外地将未经批准或破坏性的变更推到生产环境。一旦变更被批准,我们就能在生产分支中得到这些变更。
从一个分支获取变更到另一个分支的方式之一是执行git merge
命令。Git 有两类合并操作:fast-forward
和no-fast-forward
。
这么说你可能没什么概念,我们来看看区别吧。
fast-forward (--ff
)
如果当前分支与即将合并过来的分支相比,没有额外的提交,这种就是fast-forward
合并。Git 很会偷懒,它会首先尝试最简单的方案,即fast-forward
。这种合并方式不会创建新的提交,只是把另一个分支的提交记录直接合并到当前分支。
没毛病!现在我们在master
分支上有了dev
分支上的所有变更。那么,no-fast-forward
又是什么呢?
no-fast-foward (--no-ff
)
跟即将合并过来的分支比较,当前分支如果没有额外的提交,这固然很好,但实际情况往往不是这样!如果我们在当前分支上也提交了一些改动,那么 Git 就会执行no-fa