Вернуть зафиксированные файлы к их версии в master?

#git #git-revert

#git #git-revert

Вопрос:

Я модифицировал несколько файлов и зафиксировал свои изменения.

Я заметил, что есть 3 файла, которые я не должен был изменять, и я хочу, чтобы они вернулись к тому, что они были в master, но я не хочу возвращаться к предыдущему фиксации, потому что я не хочу, чтобы другие изменения в файлах были потеряны. Как мне этого добиться?

Ответ №1:

Если вы еще не нажали, поэтому ваша фиксация пока только локальная, простой процесс был бы

 # restore these 3 files to their previous state
git checkout HEAD^ -- path/to/file1 path/to/file2 path/to/file3

# include these changes...
git add path/to/file1 path/to/file2 path/to/file3

# ... in last commit
git commit --amend
  

Однако, если вы уже нажимали, есть 2 основных сценария :

1) Либо вы работаете в одиночку над этим репозиторием, либо предоставляете общий доступ к репозиторию, но работаете в одиночку над этой веткой (часто это относится к функциональным ветвям, но зависит от вашего рабочего процесса)

Описанный выше процесс в порядке, просто имейте в виду, что в следующий раз, когда вы захотите выполнить отправку на удаленный сервер, вам придется использовать -f флаг в вашей push-команде для принудительного обновления старой ссылки.

2) или это общая ветка, ее история не может быть изменена без некоторых проблем

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