Git 是程序员协同工作常用的工具,它的特色是版本管理,每次提交会产生一个新版本,我们可以在任何版本中穿梭。
可谓是后悔良药。
因为 Git 存在一个暂存区,导致撤销种类变多。其中涉及到的有:
撤销工作区的修改
撤销暂存区到工作区
同时撤销暂存区和工作区
回退一个版本
修改提交记录
撤销
1. 撤销工作区的修改
撤销工作区的修改最为常见,成本也最低。比如说不小心删了 README.md 文件,我们的第一反应可能是从垃圾桶找回。
其实不用这么麻烦,只需要执行:
仿佛什么都没有发生过。
如果要撤销工作区所有的修改:
此时,整个工作区都干净了。
2. 撤销暂存区到工作区
如果上一步的误删没有发现,使用 把删除的操作添加到了暂存区,不用慌,我们可以用以下命令把它撤回工作区:
3. 同时撤销暂存区和工作区
第 2 条撤销暂存区的操作,实际上文件并没有找回,需要再执行第 1 条的操作,撤销工作区才行。
那有没有一步到位的操作呢?当然是有的。
我们只需回退到上一次的提交(commit)记录,丢弃工作区和暂存区的修改。
此处的 HEAD 代表当前最近一次的提交记录。
4. 回退一个版本
如果误删文件的操作在加入暂存区后仍未发现,被提交到版本库,打上历史的烙印,该怎么办呢?
放弃这次提交,等价于回退到上个版本:
我们发现该命令比第 3 条多了 ^ 符号,^ 符号代表上一个版本,当然我们也可是使用 HEAD^N 回退 N 个版本。
等等,如果误删记录中包含其它内容的修改,那岂不是都丢失了么?还有一招将提交记录撤销回工作区的方法:
此时,最近的一条提交修改都回到了工作区,再利用第 1 条的方法,即可恢复误删的文件。
5. 修改提交记录
提交记录描述信息写错也是一种很容易出现的场景,以下命令可以修改最近一次提交记录:
Git 甚至支持修改过去任意一个节点的记录, 命令会进入编辑最近三个提交记录的状态,选择任意一个记录编辑,HEAD 指针就会指向这个记录,此时使用 即可修改提交记录,最后用 ,退出 rebase。
命令行优势
命令行能够帮助我们更好的理解 Git 的工作方式。抛开一切,只需记住 git 的功能是生成一个一个链式的提交节点,至于 HEAD,branch,tag,只是某个节点的标记。
更重要的原因是快。命令这么复杂难记,为什么还会快呢?其实,如果程序员觉得一样工具不好用,那十有八九是使用姿势不对。
推荐
推荐两个让 Git 命令行起飞的工具。
1. oh-my-zsh/git
oh-my-zsh 是 iTerm2 的插件管理工具,git 是命令别名的插件,安装后的效果如下:
2. tig
即使简化 Git 命令,查看修改和暂存文件还不很不方便,tig 使得这两个功能变得非常简便,比起点点鼠标,爽快很多。有兴趣的同学可以阅读:
tig-让 git 命令行可视化
领取专属 10元无门槛券
私享最新 技术干货