Я хочу отменить конкретную фиксацию в git. К сожалению, наша организация по-прежнему использует CVS в качестве стандарта, поэтому, когда я возвращаюсь в CVS, несколько коммитов git объединяются в один. В этом случае я бы хотел выделить исходный git commit, но это невозможно.
Есть ли подход, подобный тому git add --patch
, который позволил бы мне выборочно редактировать различия, чтобы решить, какие части фиксации нужно отменить?
Ответы:
Используйте опцию
--no-commit
(-n
)git revert
, затем отключите изменения, затем используйтеgit add --patch
:Примечание. Файлы, которые вы добавляете с помощью git add --patch, - это файлы, которые вы хотите восстановить, а не файлы, которые вы хотите сохранить.
источник
git reset --hard
чтобы отменить другие изменения, от которых вы не хотели возвращаться.git reset --hard
опасен для новичков, так как может потерять требуемые правки. Вместо того, чтобы привыкнутьgit status
, это намекает наgit checkout -- FILE..
более безопасное возвращение вещей.git
;git revert
надо просто--patch
поспорить.git revert
используется для отмены всех коммитов . Вы можете использоватьgit checkout -p
для интерактивного выбора битов для восстановления.commit
сначала, либоstash
, потом попробуйrevert
.Я успешно использовал следующее.
Сначала верните полную фиксацию (поместите ее в индекс), но не фиксируйте.
Затем интерактивно удалите отмененные ХОРОШИЕ изменения из индекса.
Затем зафиксируйте обратную разницу плохих изменений
Наконец, возвращенные ХОРОШИЕ изменения (которые были отменены командой сброса) все еще находятся в рабочем дереве. Их нужно очистить. Если в рабочем дереве не осталось других незафиксированных изменений, это можно сделать с помощью
источник
reset HEAD .
), потому что он не требует окончательной очистки рабочего каталога?reset -p
он короче, чемreset HEAD
следуетadd -p
. Но он все еще требует очистки, так как «хорошие» блоки, которые были сброшены, все еще находятся в рабочем каталоге после фиксации.Лично я предпочитаю эту версию, которая повторно использует автоматически сгенерированное сообщение фиксации и дает пользователю возможность отредактировать и вставить слово «частично» перед окончательной фиксацией.
источник
Решение:
источник
Другой альтернативой (если ваша текущая версия файла не слишком далеко от версии, которую вы пытаетесь вернуть) является получение хеша фиксации непосредственно перед той, которую вы хотите частично вернуть (из
git log
). Тогда ваша команда станет:Это действительно изменяет файлы в вашем рабочем дереве, но не создает никаких коммитов, поэтому, если вы действительно набираете вес, вы можете просто начать заново
git reset --hard -- file/you/want/to/fix.ext
.источник
Вы можете использовать git-revert -n, а затем использовать add --patch для выбора фрагментов.
источник