Git撤销&回滚操作(reset 和 revert)
git revert 和 git reset 的区别
git revert 用一次新的commit来回滚之前的commit,此次提交之前的commit都会被保留;
git reset 回到某次提交,提交及之前的commit都会被保留,但是此commit id之后的修改都会被删除。
git revert 和 git reset 命令都撤消以前的提交。但是,如果你已经将提交push到远程仓库,则建议你不要使用 git reset,因为它会重写提交的历史记录,这会使与其他开发人员一起处理仓库并维护一致的提交历史变得非常困难,这时使用 git revert 会更好。它通过创建一个全新的提交来撤消先前提交所做的更改,所有这些都不会改变提交的历史记录。
reset
用于撤销提交、回溯版本和调整工作目录或暂存区状态
常见方法:
撤销提交:
git reset --soft HEAD~1
撤销提交和暂存区的更改(默认mixed),移动 HEAD 指针并重置索引:
git reset --mixed HEAD~1 #或 git reset HEAD^
git reset [commit] #回溯版本到某个版本
彻底撤销提交以及暂存区和工作区的更改:
git reset --hard HEAD~1
取消暂存文件,如果你使用 git add 将文件移动到暂存区,但不再希望它成为提交的一部分,则可以使用 git reset 取消暂存该文件:
git reset HEAD git reset HEAD^ # 即上一次的commit,也可以写成HEAD~1
git reset HEAD~2 # 想要前2次提交都撤回,可以使用HEAD~2
revert
git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销,作为一次最新的提交。
git revert [--[no-]edit] [-n] [-m parent-number] [-s] [-S[<keyid>]] <commit>… git revert --continue git revert --quit git revert --abort
撤销单个commit:
git revert HEAD # 撤销前一次 commit
git revert HEAD^ # 撤销前前一次 commit git revert <commit_hash> # 撤销指定的版本
git revert 131b7a916560c549e598ca9c66c2a3d28c7508e9 # 撤销指定的版本
撤销多个commit:
git revert <commit_hash1>..<commit_hash2> #或者 git revert c5bfb2e e9f7237
git revert 131b7a916560c549e598ca9c66c2a3d28c7508e9..7a5b4709656e614deab37eb19e355ba9e724eb
撤销 merge commit:
$ git log
$ git show 86bd72f084554d3f308df62d8cdf3800a1dd3de9 # 查看merge commit id
commit 86bd72f084554d3f308df62d8cdf3800a1dd3de9
Merge: c0cb9d3bbb 80df1f69b5 # 列出来的第一个还是第二个,用数字1,2表示
$ git revert <commit reference> -m 1 # 通常情况下,由于不知道合并的哪一方应被视为主线,因此无法还原合并。 该选项指定了主线的父线编号(从 1 开始),允许还原指令相对于指定的父线反向更改。
上述命令将revert合并的操作。这里,-m 1被用来指定作为主线的第一个父本。合并提交有多个父本。revert需要额外的信息来决定哪一个合并的父本应被视为主线。在这种情况下,可以使用参数-m。
分享笔记