Допустим, другой парень создал bar поверх foo, но вы тем временем создали baz, а затем слились, давая историю
$ git lola
* 2582152 (HEAD, master) Merge branch 'otherguy'
|\
| * c7256de (otherguy) bar
* | b7e7176 baz
|/
* 9968f79 foo
Примечание. git lola - нестандартный, но полезный псевдоним.
Нет кубиков с git revert
:
$ git revert HEAD
fatal: Commit 2582152... is a merge but no -m option was given.
Чарльз Бейли, как обычно, дал отличный ответ. Использование git revert
, как в
$ git revert --no-edit -m 1 HEAD
[master e900aad] Revert "Merge branch 'otherguy'"
0 files changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 bar
эффективно удаляет bar
и создает историю
$ git lola
* e900aad (HEAD, master) Revert "Merge branch 'otherguy'"
* 2582152 Merge branch 'otherguy'
|\
| * c7256de (otherguy) bar
* | b7e7176 baz
|/
* 9968f79 foo
Но я подозреваю, что вы хотите выбросить фиксацию слияния:
$ git reset --hard HEAD^
HEAD is now at b7e7176 baz
$ git lola
* b7e7176 (HEAD, master) baz
| * c7256de (otherguy) bar
|/
* 9968f79 foo
Как описано в git rev-parse
manual
<rev>^
, например HEAD ^, v1.5.1^0
Суффикс ^
параметра редакции означает первого родителя этого объекта фиксации. ^<n>
означает n -го родителя (т.е. <rev>^
эквивалентно <rev>^1
). В качестве специального правила <rev>^0
означает саму фиксацию и используется, когда <rev>
- это имя объекта объекта тега, который ссылается на объект фиксации.
поэтому перед вызовом git reset
, HEAD^
(или HEAD^1
) было b7e7176, а HEAD^2
было c7256de, т.е., соответственно первым и вторым родителями коммита слияния.
Будьте осторожны с git reset --hard
, потому что это может испортить работу.
person
Greg Bacon
schedule
11.05.2011