#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 фиксации, где они были «правильными». Так почему бы просто не восстановить их прямо с этого коммита? В этом гавоте нет необходимости… Смотрите другой ответ.