博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GIT撤销总结
阅读量:7071 次
发布时间:2019-06-28

本文共 2187 字,大约阅读时间需要 7 分钟。

hot3.png

       任何版本控制系统的一个很有的用特性就是“撤销 (undo)”你的错误操作的能力。在 Git 里,“撤销” 蕴含了不少略有差别的撤销功能。当你进行一次新的提交的时候,Git 会保存你代码库在那个特定时间点的快照;之后,你可以利用 Git 返回到你的项目的一个早期版本。在这里,将我前段时间看书、看网页记录的东西记录一下,有一些在实际工作中还未使用过。

撤销还没有commit的工作目录中的修改

命令: git checkout -- <bad filename>

使用场景:当工作目录中的文件所作的修改有问题、或者要丢弃,目前你还没有 commit 这些修改,你想要将被修改的文件内容恢复为上次 commit时的文件内容

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

需要注意的是,使用该命令之后,你工作目录中的修改会全部消失。因为这些代码从来没有被提交到库里,GIT没有任何记录,所以无法恢复。一定在做checkout之前,搞清楚自己是否不要这些代码了。

撤销已经commit的修改

命令: git reset <SHA> 或 git reset --hard <SHA>

使用场景: 当你在本地提交了一些东西(还没有 push到服务器),但是你发现修改问题的方法不合理,想要撤销前面的几次提交,将本地的git库恢复到这几次修改之前的状态

git reset 会把你的本地代码库历史返回到指定的 SHA 状态。 缺省情况下, git reset 会保留工作目录中的修改,这样的话本地库中的提交是没有了,但所作的修改内容还在工作空间中,这是一种安全的选择。有的时候,我们还希望做到撤销提交以及将工作目录的修改一并回退到SHA,这个时候可以加上 --hard 选项。

git reset <SHA>之后再恢复到reset之前

命令: git reflog 和 git reset 或 git checkout

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

git reflog 对于恢复项目历史是一个很不错的资源,你可以恢复几乎任何你commit 过的东西git log 我们都熟悉,它会显示 commit 的列表,git reflog 也是类似的,不过它显示的是一个 HEAD 发生改变的时间列表.

一些注意事项:

  • 它涉及的只是 HEAD 的改变,在你切换分支用 git commit 进行提交、以及用 git reset撤销 commit 时,HEAD 会改变,但当你用 git checkout -- <bad filename> 撤销时(正如我们在前面讲到的情况),HEAD 并不会改变,正如前面提到的,这些修改从来没有被提交过,因此 reflog 也无法帮助我们恢复它们。

  • git reflog 不会永远保存,Git 会定期清理那些 “用不到的” 对象,不要指望几个月前的提交还一直保存在那里。

恢复方法:

  • 如果你希望准确地恢复项目的历史到某个时间点,用 git reset --hard <SHA>

  • 如果你希望重建工作目录里的一个或多个文件,让它们恢复到某个时间点的状态,用 git checkout <SHA> -- <filename>

  • 如果你希望把这些 commit 里的某一个重新提交到你的代码库里,用 git cherry-pick <SHA>

重新提交已经commit 到本地仓库的修改

命令: git commit --amend 或 git commit --amend -m "xxxx"

使用场景:当你在最后一个commit时漏掉一个文件,或者 消息里有个笔误,已经执行了 git commit -m "xxxxxxx",但在 git push 之前你意识到消息应该是 “bbbb″。

git commit --amend 会用一个新的 commit 更新并替换最近的 commit ,这个新的 commit 会把任何修改内容和上一个 commit 的内容结合起来。如果当前没有提出任何修改,这个操作就只会把上次的 commit 消息重写一遍。

撤销已经PUSH到GIT服务器上的修改

命令: git revert <SHA>

使用场景:做的修改已经push到了服务器之后才发现有问题,需要回退

git revert 会产生一个新的 commit,它和指定 SHA 对应的 commit 是相反的(或者说是反转的)。如果原先的 commit 是“物质”,新的 commit 就是“反物质” — 任何从原先的 commit 里删除的内容会在新的 commit 里被加回去,任何在原先的 commit 里加入的内容会在新的 commit 里被删除。这种撤销并不会改变历史提交记录,撤销之后,重新通过push提交,抵消原先的提交。

转载于:https://my.oschina.net/ricky716/blog/474002

你可能感兴趣的文章
lintcode:Wiggle Sort
查看>>
iOS彩票项目--第二天,自定义蒙版、封装活动菜单、自定义pop菜单
查看>>
[Unity3D]Unity3D游戏开发之角色控制漫谈
查看>>
git branch merge到master
查看>>
EJB--事务管理 .
查看>>
在vmware里面免费安装纯净的xp虚拟机
查看>>
什么是RESTfull?理解RESTfull架构【转】
查看>>
linux lsof命令详解
查看>>
MySQL中concat函数
查看>>
代理模式
查看>>
Linux命令 cat命令
查看>>
poj1007 逆序数 排序
查看>>
周末轻松话卷积(上)
查看>>
【转】对C# 中堆栈,堆,值类型,引用类型的理解
查看>>
perl脚本调用
查看>>
gcc 0长数组学习
查看>>
经方时方接轨之――茵陈蒿汤合甘露饮
查看>>
MATLAB中取整函数(fix, floor, ceil, round)的使用
查看>>
10Mybatis_mybatis和hibernate本质区别和应用场景
查看>>
网络协议栈11:Connect函数分解之TCP层
查看>>