Переименовать сообщение фиксации / отменить фиксацию в исходном дереве и удалить из графика

Я хотел бы знать, как отменить коммит git или переименовать сообщение фиксации в исходном дереве. Я зафиксировал свои изменения с неправильным сообщением фиксации. Я хотел бы отменить эту фиксацию, а также удалить ее из графика. Я попробовал вариант обратной фиксации, но на графике отображается другая фиксация.


person Sumit    schedule 03.06.2018    source источник


Ответы (3)


Теперь я представляю, что вы пытались использовать git revert для отмены коммита, но это привело к дополнительной фиксации. Вот решение для вас. используйте git log --oneline', чтобы показать вам свои журналы, вы найдете коммит с неправильным сообщением, кроме него вы найдете его хеш (например, 53fnd3w), скопируйте его, затем введите

git reset --hard <paste-the-hash>

Это заставит вас вернуться к этому коммиту, после чего, если вы хотите просто изменить имя коммита, используйте

git commit --amend -m "New commit message"

Это заставит вас изменить имя последней фиксации, на которой вы стоите. Но если вы хотите отменить эти изменения, потому что хотите разделить их на две фиксации или что-то в этом роде, используйте

git reset HEAD^

Это вернет вас к коммиту, который предшествует текущему, с незафиксированными изменениями. Как только вы сделаете новый коммит, он будет игнорировать коммиты после HEAD^, и вы увидите только новый коммит, когда сделаете

git log --oneline

Надеюсь это поможет

person Amr Adel    schedule 03.06.2018
comment
Вместо того, чтобы искать хэш предыдущего коммита, вы можете просто сделать HEAD~ вместо вставки хэша из git log. - person Code-Apprentice; 04.06.2018
comment
Ваш ответ полезен .. Спасибо @Code-Apprentice - person Sumit; 11.06.2018

В основном функциональность, которую вы ищете, называется исправлением, что позволяет вам вносить изменения в ваш последний коммит. Это функциональность, предлагаемая Sourcetree, но поскольку вы уже создали обратную фиксацию, от которой хотите избавиться, вам все равно придется «запачкать руки» с помощью командной строки.

Чтобы избавиться от последней обратной фиксации, сделайте следующее:

git reset --hard HEAD~1

После этого вы можете вернуться к комфорту Sourcetree и сделать следующее, чтобы изменить исходное сообщение коммита:

  1. Перейти к рабочей копии
  2. В правом нижнем углу выберите из Commit options -> Amend latest commit
  3. Отредактируйте сообщение о коммите и нажмите Commit
person Christos Batzilis    schedule 03.06.2018

Очень полезная команда для «перезаписи истории»: rebase

Вам нужно указать точку отсчета (последняя фиксация в истории), это выглядит так:

git rebase -i <reference point sha/tag/branch>

это приведет вас к списку коммитов и позволит вам изменить их со следующими вариантами

#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

Я думаю, что «r» - это то, что вы ищете, но вы можете видеть, что он намного мощнее. документ git по переписыванию истории.

После этого вам нужно будет принудительно обновить удаленный сервер.

git push -f <remote> <branch>
person jo_    schedule 04.06.2018
comment
Спасибо за ответ @jo_ - person Sumit; 11.06.2018