Мне интересно, есть ли способ быстро отменить конкретный кусок коммита.
Я могу сгенерировать 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
Чтобы восстановить удаленный файл из предыдущего коммита, я использовал здесь ответ: