GIT: как вернуть только одно историческое изменение, оставив других такими, какие они есть? - PullRequest
2 голосов
/ 26 октября 2011

Скажите, что я внес изменения и совершил N раз для своего проекта.

После этого я неожиданно обнаружил, что одно изменение из N изменений вызывает проблему, которую невозможно решить. Единственный способ решить эту проблему - отменить это конкретное изменение обратно , при этом мне нужно сохранить все остальные изменения (как изменения до этого проблемного изменения, так и после этого проблемного). изменить) как они сейчас.

Как подойти к этому в GIT? Я имею в виду, как отменить только одно историческое изменение и сохранить все другие изменения до и после него

Ответы [ 4 ]

3 голосов
/ 26 октября 2011

Git Community Book весьма полезна для такого рода вещей.Соответствующий раздел для вас: здесь .

Самый безопасный выбор - использовать

$ git revert <commit-hash>

и разрешать любые конфликты.Вы можете использовать git rebase, чтобы сделать это, но это переписывает историю, и это довольно пагубно для репозиториев, которые уже выдвинуты или обнародованы.Кроме того, вы можете сохранить историю, которая показывает, что вы внесли изменение, и вам пришлось его вернуть.В конце концов, это более информативно.

3 голосов
/ 26 октября 2011

Как уже говорили другие, безопаснее всего делать git revert.Это прояснит, что вы «возвращаете» это конкретное изменение.Будет применен обратный патч для отмены эффектов коммита, который вы указали в качестве аргумента.

Другой, более смертоносный способ - использовать git rebase -i и удалить «плохой коммит» в истории.Это переписает историю с этого коммита.История этого конкретного изменения вырезана из дерева, но если вы уже нажали, а другие потянули, они увидят конфликты слияния, если вы сделаете это.

1 голос
/ 26 октября 2011

Используйте git revert. Это создает новый коммит, в котором все изменения отмененного коммита отменяются. Это сохраняет историю.

0 голосов
/ 15 февраля 2012

Обратите внимание, что если у вас было более чем одно изменение для возврата, вы также можете избежать открытия редактора для каждого коммита, к которому вы возвращаетесь:

git revert справочная страница :

--no-edit

С этой опцией 'git revert' не запустит редактор сообщений фиксации.

Это облегчает создание сценариев и создание цепочек многократного возврата.

...