* **在 Git 中,有两个「偏移符号」:`^`和`~`**
`^`的用法:在`commit`的后面加一个或多个`^`号,可以把`commit`往回偏移,偏移的数量是`^`的数量。例如:`master^`表示`master`指向的`commit`之前的那个`commit`;`HEAD^^`表示`HEAD`所指向的`commit`往前数两个`commit`。
`~`的用法:在`commit`的后面加上`~`号和一个数,可以把`commit`往回偏移,偏移的数量是`~`号后面的数。例如:`HEAD~5`表示`HEAD`指向的`commit`往前数 5 个`commit`
>[success] # commit 代码后修改提交备注和内容
1. 文件已经 `commit` 一次到了本地仓库发现少修改了提交内容,需要修改一次文件,然后`git add` =》 `git commit` 此时第二次的 `commit` 完全就是第一次要做的事
2. 文件提交了,但发现修改错误了,将文件修改然后`git add` =》 `git commit` 此时第二次的 `commit` 完全就是第一次要做的事
这种情况在第二次提交时候使用 `git commit --amend`,注意**commit --amend 并不是直接修改原 commit 的内容,而是生成一条新的 commit。**
![](https://img.kancloud.cn/29/11/2911a7d8d85623892e26b14407faff93_420x370.gif)
如果你已经将第一次 `push` 到了远程,第二次使用`git commit --amend`,需要`git push -f`才能推送至远程仓库
>[success] # 写错的不是最新的提交,而是倒数第二个
[风险太高我不要](https://juejin.cn/book/6844733697996881928/section/6844733698055602190)
>[success] # 删除本次的 commit
当代码提交到本地仓库 `commit` 后觉得这次修改无用想全部丢掉,可以使用 `git reset --hard HEAD^` (`HEAD^` 往回数一个位置的`commit`),执行完后上一次提交在本地仓库的所有内容都没有,并且修改的文件内容也回到上一次 `commit `节点
* **如何找回**,`git reflog`查看原先的`commit SHA-1`码,然后`git reset --hard commitid `回退到刚才那个`commit`版本
![](https://img.kancloud.cn/52/b8/52b8ed8a6cb86471d7e8eda4d7e0e202_622x309.png)
* 注意已经你提交到了远程在执行本地的`git reset --hard HEAD^` ,你会发现代码推送不上,本地和远程的内容不一致,让git pull,然后执行了,刚才在本地`reset`的就没用了啊,内容都回来了,远程已经记录那次节点所以拉取会还原,可以**把远程库对应的`commit`删除**或者 `git push origin --force`,**可以强制让你本地的commit覆盖远程的commit,但是这个命令尽量少用,因为影响比较大**。
* 等同于 `Sourcetree `右键选中commit选择“重置当前分支到此次提交”