Git中reset和revert的用法与区别

Git中reset和revert的用法与区别

起因

最近在练习算法,将所有完成的练习题都保存到了一个Gitee代码仓库中,每次完成一些题目,就会使用git进行分支合并并提交。

某次提交过后,我发现自己提交内容的信息有误,就想撤销上次的提交内容和记录。

那么git resetgit revert这两个命令,应该用哪一个呢?

介绍

Git中的resetrevert都是用于撤销的命令,但是用法和撤销范围有所不同。

reset命令:

  • 作用:用于将分支的当前HEAD指针指向另一个提交,并可以选择是否将更改保留在工作目录中。reset的主要作用是移动HEAD和分支指针来撤销提交。

  • 撤销范围:回滚所有提交记录和文件修改

  • 三种操作模式:

    • soft模式:使用--soft选项,移动HEAD和分支指针到目标提交,但不更改工作目录和暂存区。这意味着之前提交的更改仍然在工作目录中,可以重新提交。

    • mixed模式:这是默认模式,使用--mixed选项。它移动HEAD和分支指针到目标提交,并将更改从目标提交之后的提交全部撤销,但不保留更改。这意味着之前提交的更改不会出现在工作目录中,并且需要重新添加和提交。

    • hard模式:使用--hard选项。它移动HEAD和分支指针到目标提交,并且将所有更改从目标提交之后的提交全部撤销。这意味着之前提交的更改完全丢失,慎用!

    # 只回滚commit记录
    git reset --soft HEAD^
    
    # 回滚commit和暂存区修改
    git reset HEAD^
    
    # 完全回滚到上一个版本
    git reset --hard HEAD^

git reset的常见用例包括:

  • 修正最新提交的错误

  • 合并错误的提交或分支

  • 取消最新的一系列提交

revert命令

  • 作用:命令用于创建一个新的提交,该提交撤销指定的提交或一系列提交的更改。它实际上是通过创建一个撤销先前更改的新提交来回滚提交历史,而不是像reset一样移动分支指针。

  • 撤销范围:仅撤销指定的某一次提交记录

  • 操作:revert commitID,会生成一个反向的新提交来撤销指定commit

# 撤销最近一次提交
git revert HEAD

# 撤销指定提交
git revert <commitID>

git revert的常见用例包括:

  • 在共享代码库中撤销公开的错误更改,以避免破坏其他人的工作。

  • 在团队开发中回滚问题提交,而不影响其他功能的开发。

  • 保留提交历史的完整性。

总结

  • git reset用于彻底回滚版本,可选择性撤销工作目录、暂存区或提交记录

  • git reset时需谨慎,因为它可以丢弃之前的更改,而git revert是安全的,因为它不会修改已有的提交历史

  • git revert用于生成反向提交来撤销指定提交,仅撤销指定提交的修改,前期提交记录保留

  • git revert通过创建新的撤销提交来回滚提交历史,保留了历史记录并且不会修改已有的提交

参考

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注