假设另一个人在 foo 之上创建了 bar,但你同时创建了 baz 然后合并,给出了一个历史
$ git lola
* 2582152 (HEAD, master) 合并分支 'otherguy'
|\
| * c7256de (otherguy) 酒吧
* | b7e7176 巴兹
|/
* 9968f79 富
注意:git lola 是一个非标准但有用的别名。
git revert 没有骰子:
$ git revert HEAD
致命:提交 2582152... 是一个合并,但没有给出 -m 选项。
Charles Bailey 像往常一样给了excellent answer。使用git revert,如
$ git revert --no-edit -m 1 HEAD
[master e900aad] 恢复“合并分支 'otherguy'”
0 个文件更改,0 个插入 (+),0 个删除 (-)
删除模式100644栏
有效地删除了bar 并产生了历史
$ git lola
* e900aad (HEAD, master) 恢复“合并分支 'otherguy'”
* 2582152 合并分支'otherguy'
|\
| * c7256de (otherguy) 酒吧
* | b7e7176 巴兹
|/
* 9968f79 富
但我怀疑你想扔掉合并提交:
$ git reset --hard HEAD^
HEAD 现在位于 b7e7176 baz
$ 混帐萝拉
* b7e7176(头,主)baz
| * c7256de (otherguy) 酒吧
|/
* 9968f79 富
如 git rev-parse manual 中所述
<rev>^,例如头^,v1.5.1^0
修订参数的后缀^ 表示该提交对象的第一个父级。 ^<n> 表示第 n 个父级(即 <rev>^ 等同于<rev>^1)。作为一个特殊规则,<rev>^0 表示提交本身,并且在 <rev> 是引用提交对象的标记对象的对象名称时使用。
所以在调用 git reset 之前,HEAD^(或 HEAD^1)是 b7e7176,HEAD^2 是 c7256de,ie,分别是合并提交的第一和第二父级。 p>
小心git reset --hard,因为它会破坏工作。