东坡网 - 更多系统软件下载,请关注东坡网:www.dongpow.com

当前位置:首页 > 系统教程 > Linux教程 > 详细页面

Linux系统如何在Git里撤销操作(3)

时间:2017-08-17来源:东坡网作者:zhijie

  大量的撤销/恢复

  场景: 你向某个方向开始实现一个特性,但是半路你意识到另一个方案更好。你已经进行了十几次提交,但你现在只需要其中的一部分。你希望其他不需要的提交统统消失。

  方法: git rebase -i 《earlier SHA》

  原理: -i 参数让 rebase 进入“交互模式”。它开始类似于前面讨论的 rebase,但在重新进行任何提交之前,它会暂停下来并允许你详细地修改每个提交。

  rebase -i 会打开你的缺省文本编辑器,里面列出候选的提交。如下所示:

Linux系统如何在Git里撤销操作

  前面两列是键:第一个是选定的命令,对应第二列里的 SHA 确定的 commit。缺省情况下, rebase -i 假定每个 commit 都要通过 pick 命令被运用。

  要丢弃一个 commit,只要在编辑器里删除那一行就行了。如果你不再需要项目里的那几个错误的提交,你可以删除上例中的1、3、4行。

  如果你需要保留 commit 的内容,而是对 commit 消息进行编辑,你可以使用 reword 命令。 把第一列里的 pick 替换为 reword (或者直接用 r)。有人会觉得在这里直接重写 commit 消息就行了,但是这样不管用 —rebase -i 会忽略 SHA 列前面的任何东西。它后面的文本只是用来帮助我们记住 0835fe2 是干啥的。当你完成 rebase -i 的操作之后,你会被提示输入需要编写的任何 commit 消息。

  如果你需要把两个 commit 合并到一起,你可以使用 squash 或 fixup 命令,如下所示:

Linux系统如何在Git里撤销操作

  squash 和 fixup 会“向上”合并 — 带有这两个命令的 commit 会被合并到它的前一个 commit 里。在这个例子里, 0835fe2 和 6943e85 会被合并成一个 commit, 38f5e4e 和 af67f82 会被合并成另一个。

  如果你选择了 squash, Git 会提示我们给新合并的 commit 一个新的 commit 消息; fixup 则会把合并清单里第一个 commit 的消息直接给新合并的 commit 。 这里,你知道 af67f82 是一个“完了完了…。” 的 commit,所以你会留着 38f5e4e 的 commit 消息,但你会给合并了 0835fe2 和 6943e85 的新 commit 编写一个新的消息。

  在你保存并退出编辑器的时候,Git 会按从顶部到底部的顺序运用你的 commit。你可以通过在保存前修改 commit 顺序来改变运用的顺序。如果你愿意,你也可以通过如下安排把 af67f82 和 0835fe2 合并到一起:

Linux系统如何在Git里撤销操作

分享到:

相关信息

  • linux检测及防止DDOS攻击的技巧

    身为一个网站的站长,不仅要保证网站的流量提升,还要预防DDOS攻击,那么在Linux系统下要如何检测DDOS攻击呢?又该如何防止DDOS攻击呢?这都是一门学问。...

    2023-03-16

  • 惠普笔记本Debian编译声卡驱动的方法

    在惠普笔记本上安装完Debian系统后,声音出现了问题,多半是声卡驱动故障,这时可重新安装编译声卡驱动解决问题,下面小编就给大家详细介绍下Debian编译安装声卡驱动的方法。...

    2023-03-16

系统教程栏目

栏目热门教程

人气教程排行

站长推荐

热门系统下载

公众号