Git中一些撤销和恢复命令的使用小结

时间:2022-07-30 08:13:03 

这篇文章主要介绍了Git中一些撤销和恢复命令的使用小结,文中示例基于Mac OS系统环境(当然这关系不大XD),需要的朋友可以参考下

撤销一个“已公开”的改变

场景: 你已经执行了 git push, 把你的修改发送到了 GitHub,现在你意识到这些 commit 的其中一个是有问题的,你需要撤销那一个 commit.

方法:

复制代码代码如下:

git revert

原理: git revert 会产生一个新的 commit,它和指定 SHA 对应的 commit 是相反的(或者说是反转的)。如果原先的 commit 是“物质”,新的 commit 就是“反物质” — 任何从原先的 commit 里删除的内容会在新的 commit 里被加回去,任何在原先的 commit 里加入的内容会在新的 commit  里被删除。

这是 Git 最安全、最基本的撤销场景,因为它并不会改变历史 — 所以你现在可以  git push 新的“反转” commit 来抵消你错误提交的 commit。

撤销“本地的”修改

场景: 一只猫从键盘上走过,无意中保存了修改,然后破坏了编辑器。不过,你还没有 commit 这些修改。你想要恢复被修改文件里的所有内容 — 就像上次 commit 的时候一模一样。

方法:

复制代码代码如下:

git checkout --

原理: git checkout 会把工作目录里的文件修改到 Git 之前记录的某个状态。你可以提供一个你想返回的分支名或特定 SHA ,或者在缺省情况下,Git 会认为你希望 checkout 的是 HEAD,当前 checkout 分支的最后一次 commit。

记住:你用这种方法“撤销”的任何修改真的会完全消失。因为它们从来没有被提交过,所以之后 Git 也无法帮助我们恢复它们。你要确保自己了解你在这个操作里扔掉的东西是什么!(也许可以先利用 git diff 确认一下)
Git仓库撤销至前一次提交时的状态


复制代码代码如下:

$ git checkout


复制代码代码如下:

$ git checkout -b


撤销最近一次代码提交
有时候你可能会不小心提交了错误的文件或一开始就遗漏了某些东西。下面这三步操作可以帮助你解决这个问题。

复制代码代码如下:


$ git reset --soft HEAD~1
# 对工作文件进行必要的更改
$ git add -A .
$ git commit -c ORIG_HEAD

你执行第一个命令时,Git会将HEAD指针后移到此前的一次提交,之后你才能移动文件或作必要的修改。

然后你就可以添加所有的修改,而且当你执行最后的命令时,Git会打开你的默认文本编辑器,其中会包含上一次提交时的信息。如果愿意的话,你可以修改提交信息,或者你也可以在最后的命令中使用-C而不是-c,来跳过这一步。


撤销合并Merge
要想撤销合并,你可能必须要使用恢复命令HARD RESET回到上一次提交的状态。“合并”所做的工作基本上就是重置索引,更新working tree(工作树)中的不同文件,即当前提交()代码中与HEAD游标所指向代码之间的不同文件;但是合并会保留索引与working tree之间的差异部分(例如那些没有被追踪的修改)。

复制代码代码如下:


$ git checkout -b

在撤销“本地修改”之后再恢复

场景: 你提交了几个 commit,然后用 git reset --hard 撤销了这些修改(见上一段),接着你又意识到:你希望还原这些修改!

方法:

复制代码代码如下:

git reflog 和

复制代码代码如下:

git reset或

复制代码代码如下:

git checkout

原理: git reflog 对于恢复项目历史是一个超棒的资源。你可以恢复几乎 任何东西 — 任何你 commit 过的东西 — 只要通过 reflog。

你可能已经熟悉了 git log 命令,它会显示 commit 的列表。 git reflog 也是类似的,不过它显示的是一个 HEAD 发生改变的时间列表.

一些注意事项:

它涉及的只是 HEAD 的改变。在你切换分支、用 git commit 进行提交、以及用 git reset 撤销 commit 时,HEAD 会改变,但当你用  git checkout --

Git中一些撤销和恢复命令的使用小结

大量的撤销/恢复

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

方法:

复制代码代码如下:

git rebase -i

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

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

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 命令,如下所示:

Git中一些撤销和恢复命令的使用小结
squash 和 fixup 会“向上”合并 — 带有这两个命令的 commit 会被合并到它的前一个 commit 里。在这个例子里, 0835fe2 和 6943e85 会被合并成一个 commit, 38f5e4e 和 af67f82 会被合并成另一个。

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

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

标签:Git,撤销,恢复
0
投稿

猜你喜欢

  • Excel 2013/2016中如何统计或者求和选中的复选框的数

    2022-04-15 12:44:29
  • VLOOKUP函数一对多查找

    2023-02-17 12:25:42
  • 电脑WPS文档如何裁剪图片

    2022-07-01 06:41:26
  • PS新手教程-如何使用PS快速给证件照更换照片底色

    2022-07-09 08:00:46
  • excel合并单元格操作大全,求和、序号、计数以及累计求和

    2022-02-24 19:55:58
  • excel2003使用分类汇总的方法

    2023-04-28 01:23:26
  • 如何在手机wps里调整表格单元格大小

    2023-06-05 18:01:42
  • 如何批量清除WPS文档中多余空行

    2023-03-23 04:58:36
  • Win10家庭版系统不支持远程桌面怎么办?

    2023-11-25 11:42:39
  • Win10提示已从异常关机中恢复怎么解决?

    2023-12-13 20:48:40
  • 5.返回表格后我们就会发现下拉箭头又回来了

    2023-08-08 15:32:05
  • Win10右键刷新桌面反应很慢怎么解决?

    2022-05-28 04:21:52
  • excel表格怎么删除空行呢?

    2023-09-28 07:34:05
  • excel 如何制作项目进度百分比圆环图?

    2023-01-27 16:54:27
  • office安装的时候运行setup安装的时候闪一下就不见了

    2023-09-14 18:54:27
  • 先看一下EXCEL帮助文件中对SUBTOTAL函数的解释

    2022-09-16 03:23:19
  • 在excel中特殊符号对号怎么打

    2022-06-13 15:49:58
  • 如何修改Mac中Finder边栏文件项目图标大小?

    2023-01-07 14:50:23
  • 高手分享WSP演示制作漂亮组织结构图方法

    2022-10-02 06:40:23
  • excel表格怎样设置自动计算平方

    2022-01-24 09:39:05
  • asp之家 电脑教程 m.aspxhome.com