美文网首页Git 进阶
Git 进阶 - 撤销管理 reset & revert

Git 进阶 - 撤销管理 reset & revert

作者: tingtingtina | 来源:发表于2019-12-31 18:01 被阅读0次

    在 Git 入门系列(二)- 修改管理 / 撤销操作 / 命令及区间关系 里面介绍了如何撤销,当时用到了 checkout 和 reset 命令。总结如下

    • 撤销工作区修改,使用git checkout --<file>或 git checkout .
    • 撤销暂存区提交,使用 git reset HEAD^git reset .
    • 撤销 commit,使用 git reset [<mode>] [<commit>]

    其中 mode 默认为 --mixed,类型有

    • --soft 保留修改内容到暂存区(index)
    • --mixed 保留修改内容到工作区(working dir)
    • --hard 直接丢弃修改,回退到指定的 commit,也可以理解成,强制回退到某一版本

    fetch 的学习中,之前的区间命令表又丰富了一些, 但是不免有些疑问,如果我提交了三次 C1-C2-C3,C2 不想要了,但是 C3 还想保留,怎么办呢,使用 reset,可以直接回到 C1,但是 C3 就没了。或者如果我已经 push 到远程仓库了,该怎么办呢?

    可以看到,reset 通过把分支记录退回几个提交记录来实现撤销,但是这种“改写历史”的方法对多人协作的远程分支是没有作用,而且也无法“抽出”我们后悔的那次提交。

    此时可以使用 revert 命令,revert 后会产生一次新的提交

    git revert <commit>
    

    比如在历史结构为 C1- C2 - C3 的前提下, git revert C2,在我们要撤销的提交记录后面会多了一个新提交,这是因为新提交记录 C2' 引入了更改 —— 这些更改刚好是用来撤销 C2 这个提交的。再应用到 C3 上。revert 结构会为 C1 - C2 - C3 - C2'

    在使用 revert 命令的时候,可以看到是把 C2' 应用到 C3 上,所以这里也可能产生冲突,所以也支持 --abort--continue 选项来放弃或继续操作

    由于使用比较简单,就不做过多的说明了

    可视化的工具对这个功能也友好,在某个 commit 上右键,就能看到“revert thjs commit”(GitHub) 或者 reverse commit(SourceTree)都表示反转的意思

    revert 之后就可以把你的更改推送到远程仓库与别人分享啦

    相关文章

      网友评论

        本文标题:Git 进阶 - 撤销管理 reset & revert

        本文链接:https://www.haomeiwen.com/subject/ddqrictx.html