• 欢迎访问 winrains 的个人网站!
  • 本网站主要从互联网整理和收集了与Java、网络安全、Linux等技术相关的文章,供学习和研究使用。如有侵权,请留言告知,谢谢!

git操作(8):revert

Git winrains 来源:veedrin 1年前 (2019-08-30) 60次浏览

有时候我们想撤回一个commit,但是这个commit已经在公共的分支上。如果直接修改分支历史,可能会引起一些不必要的混乱。这个时候,git revert命令就派上用场了。
revert翻译成中文是还原。我觉得称它为对冲更合理。对冲指的是同时进行两笔行情相关、方向相反、数量相当、盈亏相抵的交易,这么理解git revert命令一针见血。
因为它的作用就是生成一个新的、完全相反的commit。

命令

git revert后跟你想要对冲的commit即可。

$ git revert HEAD
Revert "add c.md"
This reverts commit 8a23dad059b60ba847a621b6058fb32fa531b20a.
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
#	deleted:    c.md

git会弹出默认或者自定义的编辑器要求你输入commit信息。然后一个新的commit就生成了。

[master a8c4205] Revert "add c.md"
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 c.md

可以看到,原本我添加了一个文件a.mdrevert操作就会执行删除命令。在工作目录看起来就像添加文件操作被撤销了一样,其实是被对冲了。
它不会改变commit历史,只会增加一个新的对冲commit。这是它最大的优点。

冲突

反向操作也会有冲突?你逗我的吧。
如果你操作的是最新的commit,那当然不会有冲突了。
那要操作的是以前的commit呢?

C0 -- C1 -- C2(HEAD -> master)

比如a.mdC0内容为空,C1修改文件内容为appleC2修改文件内容为banana。这时候你想撤销C1的修改。

$ git revert HEAD~
error: could not revert 483b537... apple
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'

我们看一下文件内容。

<<<<<<< HEAD
banana
=======
>>>>>>> parent of 483b537... apple

手动解决冲突,执行git add命令然后执行git revert --continue命令完成对冲操作。
取消revert操作只需要执行git revert --abort即可。

作者:veedrin

来源:https://github.com/veedrin/horseshoe/blob/master/git/revert.md


版权声明:文末如注明作者和来源,则表示本文系转载,版权为原作者所有 | 本文如有侵权,请及时联系,承诺在收到消息后第一时间删除 | 如转载本文,请注明原文链接。
喜欢 (1)