如何撤销 git add 和 git commit

由于心急,提交代码的时候,commit 后,发现多提交了一个文件,然后第一想法是使用 rebase 来修改提交,然后我把那个多提交的文件,恢复成修改前的样子,然后打算在 git add . 之后进行 rebase ,结果查看状态发现,它把我之前在编辑器里面忽略的一个文件也给加进来了…所以这个时候,我既多 commit 了, 又多 add 了…蜜汁尴尬…

经过查找资料,问题解决,又 get 到 git 的新技能。

1. git add 多了

  • git status 查看下 add 的文件
  • git reset HEAD 如果后面什么都不跟,就是把上一次的 git add 全部撤销。
    or
  • git reset HEAD xxx/xxx/xxx.js ,则撤销某个文件的add。这对add了一批文件后,又删除了其中的某个文件,想取消对这个文件的add的情况非常适用。

2. git add 多了之后,又 commit 了

  • 先使用 git log --oneline 查看节点,找到这次 commit 的上一次 commit 记录。
  • 然后 git reset commit_id 。退回到某一个提交的节点,代码还是现在的样子,只是那个节点之后的commit日志没有了,git add 的暂存区也清掉了,那次节点之后的所有改动都放在了当前工作区。即需要重新 git add 到暂存区,再commit。

    git reset 有三个参数可选:--hard --soft --mixed,不跟参数就是默认的--mixed

3. 使用 git revert 还原已经提交的修改(这个没有验证过)

使用 git revert 后,此次操作之前和之后的 commit 和 history 都会保留,并且把这次撤销作为一次最新的提交。

  • git revert HEAD 撤销前一次 commit
  • git revert HEAD^ 撤销前一次 commit
  • git revert commit_id 撤销指定的版本,撤销也会作为一次提交进行保存。
    git revert 是提交一个新的版本,将需要 revert 的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容。