git: удалить второй коммит - PullRequest
5 голосов
/ 23 марта 2012

Я пытаюсь удалить второй коммит в репо. В этот момент я мог бы просто сдуть .git dir и заново сделать это, но мне любопытно, как это сделать ... Я ранее удалил коммиты, но, видимо, никогда не 2-й:)

> git log

commit c39019e4b08497406c53ceb532f99801793205ca
Author: Me
Date:   Thu Mar 22 14:02:41 2012 -0700

    Initializing registry directories

commit 535dce28f1c68e8af9d22bc653aca426fb7825d8
Author: Me
Date:   Tue Jan 31 21:04:13 2012 -0800

    First Commit

> git rebase -i HEAD~2
fatal: Needed a single revision
invalid upstream HEAD~2

> git rebase -i HEAD~1

В какой момент я попадаю в мой редактор:

pick c39019e Initializing registry directories

# Rebase 535dce2..c39019e onto 535dce2
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

Теперь моя проблема в том, что я не могу просто сдуть этот второй коммит, так как «если вы удалите все, ребаз будет отменен»

Ответы [ 5 ]

5 голосов
/ 23 марта 2012

Чтобы удалить самый верхний коммит, используйте git reset --hard HEAD~. Перебазировка не нужна, так как вы ничего не удаляете между другими коммитами.

2 голосов
/ 23 марта 2012

Это уже ответ (выше), но обратите внимание, что в более новом git есть команда noop, которую вы можете поместить в файл.Таким образом, вы можете заменить строку pick на noop:

$ git rebase -i HEAD^
[in editor, change pick line to noop, and write and quit]
".git/rebase-merge/git-rebase-todo" 15L, 492C written
Successfully rebased and updated refs/heads/master.
$ 

По общему признанию, это ничего не значит, что git reset не делает так просто ... но если вы уже начали интерактивную перебазировкуи вы понимаете, что хотели, только после того, как уловка noop будет полезна.

1 голос
/ 23 марта 2012

Почему вы не отменили свой коммит?

git revert 535dce28f1c68e8af9d22bc653aca426fb7825d8 или git revert HEAD~1

0 голосов
/ 05 февраля 2015

Вы также можете сделать следующее:

git rebase -i --root

Это будет включать в себя корневой коммит в вашей ребазе. Затем вы можете выбрать fixup, squash или полностью удалить второй коммит, если хотите.

0 голосов
/ 23 марта 2012

Если это последний коммит, то вы можете сделать:

git reset --hard HEAD~

И если это не последний коммит, у вас был бы еще один коммит по крайней мере в списке ребаз, и вы можете удалить 2-й коммит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...