Есть ли команда, позволяющая частично отменить изменения файла (или файлов) в рабочем каталоге?
Предположим, вы много редактировали файл, но понимаете, что хотите отменить некоторые изменения обратно в зафиксированное состояние, но не другие изменения.
Я представляю себе вариант, git checkout
который работает очень похоже git add -p
, то есть он просматривает фрагмент файла за фрагментом и спрашивает, хотите ли вы его сохранить или нет.
revert
выбрать, какие изменения в файле будут отменены? Искренне спрашиваю, так как у меня только опыт работы с CVS и Git. В Gitgit checkout -- path/to/file
это одна команда, которая отменяет все изменения в этом файле, но это не то же самое, что и выше.git checkout --patch
иgit reset --patch
которые работают какgit add --patch
в последнем git.--
правило, означает конец анализа параметров, и любые аргументы, которые идут после него, должны интерпретироваться буквально. Это означает, что вам не нужно будет добавлять./
перед любым именем файла, который начинается со знака минус, если имя файла идет после--
.git checkout --patch
diff, кажется, что это назад. Знаки минуса ДОБАВЛЯЮТ текст в мою рабочую копию, а символы плюс - УДАЛЯЮТ строки из моей рабочей копии.С версией git> = 1.7.1 я могу
Я не уверен, когда появилась эта функция.
источник
git reset -p
можете выборочно отключить изменения из области подготовки / индекса. Я также не знаю, в какой версии Git это было введено.git checkout $file
возвращает файл$file
в последнее зафиксированное состояние. Я думаю, вы можете использовать,git checkout SHA-1 -- $file
чтобы вернуть файл к фиксации, определенной SHA-1.источник
Сколько коммитов вам нужно вернуться и выбрать? Если это только один, возможно, возьмите ветку непосредственно перед ним, проверьте файл, который вы зафиксировали, а затем используйте,
git add -p
чтобы добавить его так, как вы этого хотели. Затем вы можете вернуться туда, где вы были, и извлечь файл из своей временной ветки.то есть:
Другие альтернативы включают возврат и редактирование фиксации с помощью
git rebase -i
(отметка фиксации какedit
, затем выполнениеgit reset HEAD^
и повторение фиксации при возврате в оболочку).Если изменения, которые вам нужно выбрать, распределены по серии коммитов, может быть лучше извлечь их как патчи (или патч, покрывающий все из них) и вручную отредактировать патч, удалив изменения, которые вы хотите сохранить, и подача остатка в
git apply --reverse
.источник