Git:重写&撤销

git commit --amend

  • 修改最近提交的注解信息
  • 更改最近提交的文件

修改最近 commit 的注解信息

git log --oneline

对注解信息有洁癖,想改,但是不想增多一个 commit,怎么办?!

git commit --amend -m "xxxx"

重写 commit 信息,且不会新增 commit

最后结果

更改最近提交的文件

  1. 修改README.md,一波操作 git add . git commit
  2. 突然想起,要新增dont_forget_me.txt
  3. 最后只将README.md 添加暂存区,失误忽略了dont_forget_me.txt
  1. commit 后,发现只有 1 file changed
  2. 洁癖,不想增加多一个 commit,怎么办
  1. --no-edit:不更改提交消息的情况下对提交进行修改。
  2. 最终得到的提交将替换不完整的提交。

切记

  • 本地 commit 与 远程分支 commit 具有差异
  • 不要在公共分支进行该操作
  • 不要修改他人的 commit(怕是个傻子)

git revert

  • 新增 commit,来取消指定的commit
  • 区别 git reset、git rebase ,这是较为安全的操作

应用场景

追踪某缺陷,发现它是由单个提交引入的。使用git revert可以回滚该提交,而不是手动编辑、修复及提交。

  1. --no-edit: 不会打开编辑器,默认的提交信息
  2. -e/--edit: 打开编辑器,可修改提交信息
  3. -n/--no-commit: 不会产生提交,而是放在暂存区

结果

git reset

  • 移动 HEAD的位置 --soft
  • 复原暂存区 --mixed(默认)
  • 更新工作目录 --hard

切记

  • 不要在公共分支使用 git reset --hard && git push -f
  • 除了 --hard,git reset 都是安全的操作
  • git reset file.txt === git reset --mixed HEAD file.txt

彩蛋

Git:重写&撤销

By Zachary Kwan

Git:重写&撤销

  • 51