Как мне «открыть» git commit? - PullRequest
5 голосов
/ 04 ноября 2011

(обратите внимание, я не ищу ответа git rebase -i)

В Mercurial я могу "вновь открыть" коммит, импортировав его в свою очередь патчей:

hg qimport tip

Коммит "открыт" в том смысле, что до того, как я его зафиксировал, я могу вернуться, выполнить hg diff, hg status и т. Д. Как мне сделать это в git?

(Все, что я нашел в Интернете, предлагает git rebase -i, а затем выберите edit , но это не так, потому что коммит не "открыт" таким же образом.)

Ответы [ 4 ]

16 голосов
/ 04 ноября 2011

Вам просто нужно переместить указатель HEAD вверх, не внося никаких изменений в вашу рабочую копию:

git reset --soft HEAD^

Сброс перемещает указатель, а программная опция указывает, что он не должен изменять какие-либо ваши файлы.,По умолчанию используется смешанное значение, которое сбрасывает ваш индекс, а опция hard фактически удаляет изменения, внесенные в вашу рабочую копию.

HEAD - это «магический» указатель git, который всегда указывает на текущий ref (т. Е. На родительский элемент вашей рабочей копии).Символ каретки (^) указывает на родителя.Вы можете использовать это несколько раз, например, HEAD ^^ ссылается на родителя последнего коммита.

2 голосов
/ 04 ноября 2011

Вы можете достичь того же результата, используя git commit --amend.

См. сравнительную таблицу между Hg и Git.

2 голосов
/ 04 ноября 2011

Предполагая, что вы еще не отправили в свой удаленный репозиторий, git reset --soft HEAD^ "вновь откроет" ваш последний коммит за счет потери вашего сообщения о коммите.

1 голос
/ 05 ноября 2011

Скотт Чакон (чудесно) подробно описал команду 'git reset': http://progit.org/2011/07/11/reset.html Не стесняйтесь взглянуть на нее.

...