Как я могу исправить отмененный коммит мерзавца? - PullRequest
40 голосов
/ 18 марта 2011

Я внес в репозиторий кучу изменений, и они были отозваны кем-то другим (они компилируются в Windows, но не в Linux).Я думаю, что изменения все еще в истории, но как мне вернуть эти изменения, исправить их, а затем повторно отправить?

Ответы [ 4 ]

68 голосов
/ 18 марта 2011

Вы пытались отменить возврат?

Они отменили ваш коммит, используя

git revert <your commit id>

Сам по себе возврат является фиксацией и имеет свой собственный идентификатор фиксации. Так что теперь вам нужно сделать

git revert <the commit id of his revert-commit>
22 голосов
/ 18 марта 2011

Вы можете попробовать отменить возврат, используя git revert.Вы также можете восстановить файлы из вашего коммита, используя git checkout.Или вы можете использовать git cherry-pick -n для их повторного применения и изменения.Вы можете создать новую ветку из вашего коммита, где вы применяете изменения, используя git branch.Возможности (почти) бесконечны.:)

2 голосов
/ 18 марта 2011

Другие ответы здесь касаются того, как вернуть или зафиксировать ваши коммиты, но из вопроса звучит так, как будто вам также нужно знать, как найти ваши коммиты, так что вот несколько советов по этому поводу.

Если вы просто запустите git log, вы должны увидеть список коммитов в истории вашей текущей ветки, начиная с самых последних. Каждый коммит имеет идентификатор, технически известный как имя объекта (или «SHA1sum of commit»), который выглядит следующим образом:

commit d2d434beeb03e4ee648ca7ca2a1ea1ed09077306

... с указанием имени автора, даты и сводки изменений, которые были внесены этим коммитом. Когда вы указываете имя объекта для git revert или git cherry-pick, вы можете дать ему d2d434beeb03e4ee648ca7ca2a1ea1ed09077306 или просто достаточно символов от начала имени объекта, чтобы оно было однозначным (например, d2d434bee)

git log имеет множество опций, которые могут помочь вам отслеживать ваши коммиты, например --before, -S и т. Д., Но в этом случае вам особенно может понадобиться --author=MyLastName.

Графический инструмент git, который может приятно представить вам историю и который доступен на любой платформе: gitk --all. Если вы нажмете на коммит, который хотите отменить, вы можете скопировать и вставить его имя объекта из поля «SHA1 ID» в середине окна.

1 голос
/ 24 июля 2018

Вы также можете сделать похожий ответ на ситуацию https://stackoverflow.com/a/10415744/704008 от @MarkLongair. Ответ лучше подходит для многократных коммитов и , если вы не хотите вносить беспорядок в журнал git или историю управления исходным кодом отменить, а затем снова отменить возврат.

git revert abcd123
git revert --no-commit wxyz789
git commit --amend -m"you edit commit message"

Вы также можете иметь краткий текст в одной строке для двух или более обратных коммитов, таких как:

git revert abcd123 wxyz789 --no-commit 
git commit --amend -m"you edit commit message"

... а затем напишите соответствующее сообщение о коммите, описывающее комбинированный эффект отмены обоих коммитов.

Все это будет выглядеть как единичный коммит с данным сообщением, а не как многократный аннулирование коммитов в git log или над логами контроля версий (например, интеграция bitbucket / TFS / JIRA git).

...