使用 git checkout 撤销本地修改
即放弃对本地已修改但尚未提交的文件的修改,还原其到未修改前的状态。
注意: 已 add / commit 的文件不适用个方法,应该用 git reset。
git checkout . # 撤销对所有已修改但未提交的文件的修改,但不包括新增的文件
git checkout [filename] # 撤销对指定文件的修改,[filename]为文件名使用 git reset 回退项目版本
可以回退到任意已经提交过的版本。已 add / commit 但未 push 的文件也适用。
git reset --hard [commit-hashcode] #[commit-hashcode]是某个 commit 的哈希值使用 git log 或 git reflog 查看日志,获取提交的哈希值,再使用 git reset进行撤回。
$ git reflog
d22f8a5 (HEAD -> master, origin/master) HEAD@{0}: commit: update
45d05fd HEAD@{1}: commit: Add -a option,modify permissions
bffd561 HEAD@{2}: commit: .
6ca5e6c HEAD@{3}: commit: update # 比如我要回退到这一次提交
5e1c0ea HEAD@{4}: pull: Fast-forward
7031306 HEAD@{5}: commit: Remove redundant commands
77f3e3d HEAD@{6}: commit: Modify function
ae76ba8 HEAD@{7}: commit (initial): add ikey.sh那么就可以用 git reset 6ca5e6c --hard
--mixed:默认,这个模式会把暂存区的文件丢弃,但不会动到工作目录的文件--soft:这个模式下的,工作目录跟暂存区的文件都不会被丢弃--hard:在这个模式下,不管是工作目录以及暂存区的文件都会丢弃。
与 git revert 的区别
revert 撤销一个提交的同时会创建一个新的提交。这是一个安全的方法,因为它不会重写提交历史。它会把此次操作之前和之后的 commit 和 history 都会保留,并且把这次撤销作为一次最新的提交。可以理解为比 reset 多了一次 commit 操作。
简单的撤销方式
撤销到上一个版本:
git reset --hard HEAD^^代表撤销到上一个版本,后面跟几^个就撤销几次。
还可以在后面加入 ~ 符号和数字。比如如撤销6次:
git reset --hard HEAD~6HEAD指针指向的是最新的提交节点。而HEAD^代表的是前一次的提交节点。而HEAD~6代表的是前6次的提交节点。
git reset --soft HEAD^:将最近一次提交节点的提交记录回退到暂存区
git reset --mixed HEAD^:将最近一次提交节点的提交记录回退到工作区
git reset --hard HEAD^:将最近一次提交节点的提交记录全部清除
撤销已经 push 到远端的 commit
先在本地回退到相应的版本,如果此时使用 git push 命令,会提示本地的版本落后于远端的版本。
为了覆盖掉远端的版本信息,使远端的仓库也回退到相应的版本,需要加上参数 --force
git push origin <分支名> --force参考
本文作者:P3TERX
本文链接:https://p3terx.com/archives/undo-operation-in-git.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。非商业转载及引用请注明出处(作者、原文链接),商业转载请联系作者获得授权。