首页你好哇,世界马蹄疾
Git专题:revert
马蹄疾
2019-01-09 20:35:02

有时候我们想撤回一个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即可。

#工具
@Git
0comments withand markdown
输入 @+用户名+空格 可以AT某人,AT某人时可以按TAB键补全
输入 登记过的邮箱 会自动补全剩余信息,可以登记原账号,也可以修改用户名再登记原账号
先登记后评论,乖
{粤ICP备18059296号}
性别: