Как мне отменить конкретный кусок коммита в git?
Мне интересно, есть ли способ быстро отменить конкретный кусок коммита.
Я могу сгенерировать a diff
между двумя коммитами или HEAD
, чтобы увидеть разницу.
Как мне отменить только один из этих ханков (или, еще лучше, набор конкретных кусков)?
Ответы
Ответ 1
git checkout -p $REF -- path/to/file
Где $REF
- это имя ссылки или идентификатор фиксации, который указывает фиксацию, из которой вы хотите передать состояние файла. Например, чтобы выборочно вернуть изменения, сделанные в последнем фиксации, используйте HEAD^
.
Ответ 2
git difftool $REF -- /path/to/file
где $REF
- это имя ссылки или идентификатор фиксации, определяющий фиксацию, из которой вы хотите получить состояние файла. Например, чтобы выборочно вернуть изменения, сделанные в последнем фиксации, используйте HEAD ^.
На этот вопрос уже ответил @cdhowie, но мне было несколько лучше использовать интерактивный diffftool, например meld
, чтобы выборочно восстанавливать старые hunks/lines кода, особенно если есть недавно введенный, найти ошибку в коде.
Ответ 3
Чтобы восстановить удаленный файл из предыдущего коммита, я использовал здесь ответ:
Найти и восстановить удаленный файл в репозитории Git
git checkout <deleting_commit>^ -- <file_path>