Как отменить внесенные изменения в определенные файлы без перезагрузки?

#git #github #commit #revert #git-revert

Вопрос:

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

Я просто хочу создать коммит, который отменит все изменения, которые я внес только в файлы, в которые я не хотел вносить изменения.

Комментарии:

1. Если вы понизите голос, не могли бы вы поделиться, пожалуйста, почему?

Ответ №1:

Похоже, вы хотите полностью отменить изменения в целевых файлах и вернуть их в исходное состояние в корневой фиксации (той, на которую вы указываете HEAD~20 ).

Простой способ сделать это — :

 git checkout <that sha> -- file1 file2 file3 ...
# you can also checkout those files one by one, or if you have a list :
git checkout <that sha> -- $(cat list.txt)

# check the content, then run :
git commit
 

Комментарии:

1. Хм … я попробую это в следующий раз.

Ответ №2:

До сих пор лучшее решение, которое у меня есть, — это создать ответвление от моей текущей ветви, мягко сбросив все сделанные мной коммиты.

 git checkout -b <newBranch> <currentBranch>
git reset --soft HEAD~20
git reset
 

Подготовьте и зафиксируйте нежелательные файлы.

 git add <unwantedFile1>
git add <unwantedFile2>
 

Затем зафиксируйте эти изменения, а затем создайте фиксацию возврата для этих изменений.

 git commit -m "Unwanted refactoring"
git log
 

Затем скопируйте sha для этого коммита, а затем создайте обратный коммит:

 git revert <sha>
 

затем скопируйте эту фиксацию, затем переключитесь обратно на первую ветвь и выберите фиксацию возврата.

 git cherry-pick <revertSha>
 

Комментарии:

1. Так что, похоже, вы знаете имена всех файлов и SHA фиксации, где они были «правильными». Так почему бы просто не восстановить их прямо с этого коммита? В этом гавоте нет необходимости… Смотрите другой ответ.