Git 撤销的各种姿势

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 命令行可视化

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180611G0989O00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券