После последнего коммита я изменил кучу файлов в моей рабочей копии, но я хочу отменить изменения одного из этих файлов, как при сбросе его в то же состояние, что и у самого последнего коммита.
Однако я хочу отменить изменения рабочей копии только одного этого файла, и ничего больше с ним.
Как я могу это сделать?
git reset HEAD <filename> ; git checkout -- <filename>
HEAD^^
2 коммита из последних илиHEAD^^^
3 коммита назад. Вы также можете использоватьHEAD~2
, илиHEAD~3
, что более удобно, если вы хотите выполнить больше коммитов назад, тогда какHEAD^2
означает «второй родитель этого коммита»; из-за коммитов слиянием коммит может иметь более одного предыдущего коммита, поэтому сHEAD^
номером выбирается, какой из этих родителей, а сHEAD~
номером всегда выбирается первый родитель, но это количество коммитов возвращается. Смотритеgit help rev-parse
для более подробной информации.Просто используйте
Это заменит имя файла последней версией из текущей ветви.
ВНИМАНИЕ: ваши изменения будут отменены - резервная копия не сохраняется.
источник
git checkout x
x является как именем ветви, так и именем файла, я не уверен, что такое поведение по умолчанию, но я думаю, что git предполагает, что вы хотите переключиться на ветку x. Когда вы используете,--
вы говорите, что ниже следует имя файла (ов).--
из него. Хотя все еще правильно, как указывает @hasen, если есть двусмысленность между именами файлов и веток, вы можете столкнуться с очень нежелательным поведением здесь!--
, красиво и легко. Когда вы называете ветки, используя имена файлов, где-то должно быть плохое мышление ...Я использовал это сегодня, потому что я понял, что мой favicon был перезаписан несколько коммитов назад, когда я обновился до Drupal 6.10, поэтому мне пришлось вернуть его. Вот что я сделал:
источник
git log --oneline <filename>
даст вам более компактный журнал и будет включать только изменения в конкретном файлеgit reflog <filename>
Если ваш файл уже подготовлен (происходит, когда вы делаете git add и т. Д. После редактирования файла), чтобы отменить изменения.
использование
затем
Если еще не постановили, просто используйте
источник
Если вы хотите просто отменить изменения предыдущего коммита в этом одном файле, вы можете попробовать это:
Это извлечет файл таким, каким он был до последнего коммита. Если вы хотите вернуться еще на несколько коммитов, используйте
branchname~n
обозначение.источник
branchname^
Я сделал через git bash:
(use "git checkout -- <file>..." to discard changes in working directory)
источник
Я всегда путаюсь с этим, поэтому вот контрольный пример с напоминанием; допустим, у нас есть этот
bash
скрипт для тестированияgit
:На этом этапе изменения не размещаются в кеше, так же
git status
как и:Если с этого момента мы это сделаем
git checkout
, результат будет таким:Если вместо этого мы делаем
git reset
, результат:Итак, в этом случае - если изменения не являются поэтапными,
git reset
не имеет значения, покаgit checkout
перезаписываются изменения.Теперь предположим, что последнее изменение из приведенного выше сценария является поэтапным / кэшированным, то есть мы также сделали это
git add b.txt
в конце.В этом случае,
git status
на данный момент это:Если с этого момента, мы делаем
git checkout
, результат будет таким:Если вместо этого мы делаем
git reset
, результат:Таким образом, в этом случае - если изменения будут поэтапными, в
git reset
основном внесут поэтапные изменения в не поэтапные изменения - в то времяgit checkout
как изменения будут полностью перезаписаны.источник
Этот ответ предназначен для команды, необходимой для отмены локальных изменений, которые находятся в нескольких конкретных файлах в одной или нескольких папках (или каталогах). Этот ответ, в частности, отвечает на вопрос, где у пользователя более одного файла, но он не хочет отменять все локальные изменения:
Для нескольких файлов в одной папке:
Звездочка, указанная выше, выполняет процедуру удаления всех файлов в этом месте с именем name / name2.
Примечание: name1, name2, nameA, subFolder - все эти примеры имен папок указывают папку или пакет, в котором могут находиться рассматриваемые файлы.
источник
Я восстанавливаю свои файлы, используя идентификатор SHA. Что я делаю?
git checkout <sha hash id> <file name>
источник
У меня только этот работал
источник
Если вы еще не отправили или не поделились своим коммитом:
источник
Если он уже зафиксирован, вы можете отменить изменение файла и зафиксировать снова, а затем заменить новый коммит последним коммитом.
источник
Я не знаю почему, но когда я пытаюсь ввести свой код, он выглядит как изображение.
источник