Жесткий reset одного файла
В настоящее время у меня есть три измененных файла в моем рабочем каталоге. Однако я хочу, чтобы один из них был reset в состоянии HEAD.
В SVN я бы использовал svn revert <filename>
(а затем svn update <filename>
, если это необходимо), но в git я должен использовать git reset --hard
. Однако эта команда не может работать в одном файле.
Есть ли способ в git отказаться от одного файла и перезаписать его новой копией HEAD?
Ответы
Ответ 1
Вы можете использовать следующую команду:
git checkout HEAD -- my-file.txt
... который обновит рабочую копию my-file.txt
и ее состояние в индексе с помощью HEAD.
--
в основном означает: обрабатывать каждый аргумент после этой точки как имя файла. Подробнее в этом ответе. Благодаря VonC для указания этого.
Ответ 2
Сброс к голове:
Для полной перезагрузки одного файла в HEAD:
git checkout @ -- myfile.ext
Обратите внимание, что @
означает сокращение от HEAD
. Старая версия git может не поддерживать краткую форму.
Сбросить на индекс:
Чтобы принудительно сбросить отдельный файл к индексу, предполагая, что индекс не пустой, в противном случае к HEAD:
git checkout -- myfile.ext
Суть в том, что для безопасности вы не хотите исключать @
или HEAD
из команды, если только вы не хотите сбросить только индекс.
Ответ 3
Чтобы вернуться в upstream/master, сделайте:
git checkout upstream/master -- myfile.txt
Ответ 4
Вы можете использовать приведенную ниже команду для сброса одного файла
git checkout HEAD -- path_to_file/file_name
Перечислите все измененные файлы, чтобы получить path_to_file/filename
с помощью следующей команды
git status
Ответ 5
Вы можете использовать следующую команду:
git reset -- my-file.txt
который обновит обе рабочие копии my-file.txt
при добавлении.
Ответ 6
Ссылка на ГОЛОВУ не обязательна.
git checkout -- file.js
достаточно
Ответ 7
Вы можете использовать следующую команду:
git checkout filename
Если у вас есть ветка с тем же именем файла, вы должны использовать эту команду:
git checkout -- filename
Ответ 8
Простой, легкий, практичный способ вытащить вас из горячей воды, особенно если вам не очень удобен git:
-
Просмотр журнала вашего файла
git log myFile.js
commit 1023057173029091u23f01w276931f7f42595f84f Автор: kmiklas Дата: вторник, 7 августа 09:29:34 2018 -0400
JIRA-12345 - Рефакторинг с новой архитектурой.
-
Примечание хэш файла:
1023057173029091u23f01w276931f7f42595f84f
-
Показать файл, используя хэш. Убедитесь, что вы хотите:
git show 1023057173029091u23f01w276931f7f42595f84f:./myFile.js
-
Перенаправить файл в локальную копию
git show 1023057173029091u23f01w276931f7f42595f84f:./myFile.js> myFile.07aug2018.js
-
Сделайте резервную копию вашего текущего файла.
cp myFile.js myFile.bak.js
-
Откройте оба файла в вашем любимом текстовом редакторе.
vim myFile.js
vim myFile.07aug2018.js
-
Скопируйте и вставьте код из myFile.07aug2018.js в myFile.js и сохраните.
-
Зафиксируйте и нажмите myFile.js
-
Снова просмотрите журнал и убедитесь, что ваш файл правильно на месте.
-
Скажите своим клиентам, чтобы они брали последнюю версию, с удовольствием наблюдаем, как она работает со старой версией на месте.
Не самое сексуальное или наиболее мерзкое решение, и определенно "ручной" сброс/возврат, но это работает. Это требует минимального знания git и не нарушает историю коммитов.