处理生活中需要代码撤回的场景:
- 工作区中的代码想撤回(没有提交过的)
git checkout -- <file>
- add 到暂存区的代码想撤回。
git reset HEAD
- 提交到本地仓库的代码想撤回。
git reset --soft <版本号>
。也可以修改soft为Hard放弃版本后的所有修改。 - 远程提交的代码想撤回。在本地修改完之后,使用命令
git push origin <分支名> --force
。
版本号的写法,有很多种。 1. HEAD表示撤回到上一个,HEAD^ 表示上上一个,依次类推。2. 用数字代替,比如撤回到上100个,HEAD~100。3. 使用指定的版本号(hash码),太长写前面几个字符就可以。
状况1:本地代码提交,我想撤回修改,再提交?我的操作,直接运行了 git reset HEAD
,然后我发现我确实撤回到了上个版本状态,但是我的修改全都丢失了(真的丢失了嘛?)
很重要的一个概念:不管是用什麼模式進行 Reset,Commit 就是 Commit,並不會因為你 Reset 它然後就馬上消失了
git log --online
: 按行显示提交的日志信息(不会显示Reset等提交信息)git reflog
: 更加详细的指示每次变更的修订记录
解决思路:使用 git reflog
命令找到想撤回的状态的hash值,然后在使用 git reset hashvalue --hard
。--hard
强迫放弃所有 reset 之后的修改。
修改 commit 信息
只是修改最近一次的commit 信息
git commit --amend
参考资料