本文记录一些git下的撤销和修改历史操作。
先来看一张图
这张图基本列出了git添加和提交的撤销操作和git各个区的关系,看这个图有助于理解之后个各个命令。
修改最近一笔commit 链接到标题
CASE 1: 撤销git add,修改任然保留再工作区(workspace) git reset HEAD git reset HEAD –
CASE 2: 撤销git add,不保留修改,代码和上一次提交一致 git checkout . git checkout –
CASE 3: 撤销 commit 到stage区(撤销了git commit动作,保留了git add和工作区修改) git reset –soft
CASE 4: 撤销 commit 到工作区(撤销了git add和git commit动作,保留了工作区修改) git reset –mixed
CASE 5: 回退版本库(撤销,git commit,回到上一个版本) git reset –hard
CASE 6: 修改最后一笔commit(如果只修改commit log,不用执行git add) git add . git commit –amend
CASE 7: 撤销git reset(找回commit) git reflog 找到被reset的commit记录对应的hash值 git reset –hard
修改历史commit 链接到标题
例如,下面有4笔提交,只想改3e6f075这一笔怎么办
4404139 (HEAD -> zephyr_master_match) modify test a0d4e6c debug ov7725 3e6f075 Remove DATA_SEMC sync with zephyr master dbd5fe7 (origin/master, origin/HEAD, master) Sync v2.4.0 (#31) 7bf10b0 add mp3 decoder (#28)
步骤如下
- git rebase -i HEAD~4 会看到如下内容
pick dbd5fe7 Sync v2.4.0 (#31) pick 3e6f075 Remove DATA_SEMC sync with zephyr master pick a0d4e6c debug ov7725 pick 4404139 modify test
- 将3e6f075前的pick改为edit,然后保存退出,此时已经处于3e6f075
- 对代码进行修改,然后执行git add
- git commit –amend
- git rebase –continue
如果这次修改后后面的commit有冲突,git rebase continue的时候会要求处理冲突,处理完后再进行步骤3~5即可。
参考 链接到标题
https://www.stephenmarron.com/2017/02/git-data-transport-commands/