修改commit(撤回git add 和git commit)
这部分仅适合没有git push 提交的,若是已经提交的,则仅能使用上面的命令才行
修改最新commit
1 2 3
| git reset HEAD~1 # 相当于git reset --mixed HEAD~1 会撤销add和commit # 正常修改代码 # 再次add和commit即可
|
修改上一次commit
1 2 3
| git reset HEAD~2 # 正常修改代码 # 再次add和commit即可
|
完全撤回commit(就是撤回git push ,直接在远程和本地的git log里看不到这条commit记录)
注:带–hard的会删除本地更改的代码
方案1
1 2 3 4
| git log # 查看commit 历史 git reset --hard HEAD^ # 回滚到上次提交 git reset --hard xxxxx # 回滚到xxxxx提交 git push origin master -f # 提交删除操作
|
方案2
1 2 3 4
| git log # 查看commit 历史 git rebase -i xxxxxx # xxxxx为目标commit的前一个commit 然后drop掉目标commit git push origin master -f # 提交删除操作
|
初次提交
1 2 3 4
| 修改文件 git add . # 添加修改 git commit --amend -m 'initial commit' # 提交修改(但其实是修改的上一次提交) git push origin main -f # 上传修改
|
在第一次提交之前没有任何东西,因为每次提交都引用一个父提交。这使得第一次提交是特殊的(孤立提交),所以没有办法引用以前的“状态”。
因此,如果您想修复提交,您可以简单地git commit –amend:这将修改提交,而不创建另一个提交。
如果只是想重新开始,可以删除.git存储库,然后使用git init创建另一个存储库
refs:https://cloud.tencent.com/developer/ask/sof/77445
refs:https://blog.csdn.net/CHAOS_ORDER/article/details/122655480
git选项
git reset
1 2 3 4 5 6 7 8
| git reset --soft 完全保留工作区和暂存区,会撤销git commit提交,保留git add操作的内容(所有reset都会执行这个操作) git reset --mixed 完全保留工作区,会撤销commit提交和git add操作 (默认选项)
git reset --hard 彻底清除工作区和暂存区,***慎用***
git reset --keep 保留工作区和HEAD之间的差异
|
HEAD~N or HEAD^N
替代commit id,表示距离HEAD之前的第N次commit id
另附:很好的一张解释图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| G H I J \ / \ / D E F \ | / \ \ | / | \|/ | B C \ / \ / A
A = = A^0 B = A^ = A^1 = A~1 C = A^2 D = A^^ = A^1^1 = A~2 E = B^2 = A^^2 F = B^3 = A^^3 G = A^^^ = A^1^1^1 = A~3 H = D^2 = B^^2 = A^^^2 = A~2^2 I = F^ = B^3^ = A^^3^ J = F^2 = B^3^2 = A^^3^2
|
ref:https://stackoverflow.com/questions/2221658/whats-the-difference-between-head-and-head-in-git