Жесткий 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:

  1. Просмотр журнала вашего файла

    git log myFile.js

    commit 1023057173029091u23f01w276931f7f42595f84f Автор: kmiklas Дата: вторник, 7 августа 09:29:34 2018 -0400

    JIRA-12345 - Рефакторинг с новой архитектурой.

  2. Примечание хэш файла:

    1023057173029091u23f01w276931f7f42595f84f

  3. Показать файл, используя хэш. Убедитесь, что вы хотите:

    git show 1023057173029091u23f01w276931f7f42595f84f:./myFile.js

  4. Перенаправить файл в локальную копию

    git show 1023057173029091u23f01w276931f7f42595f84f:./myFile.js> myFile.07aug2018.js

  5. Сделайте резервную копию вашего текущего файла.

    cp myFile.js myFile.bak.js

  6. Откройте оба файла в вашем любимом текстовом редакторе.

    vim myFile.js
    vim myFile.07aug2018.js

  7. Скопируйте и вставьте код из myFile.07aug2018.js в myFile.js и сохраните.

  8. Зафиксируйте и нажмите myFile.js

  9. Снова просмотрите журнал и убедитесь, что ваш файл правильно на месте.

  10. Скажите своим клиентам, чтобы они брали последнюю версию, с удовольствием наблюдаем, как она работает со старой версией на месте.

Не самое сексуальное или наиболее мерзкое решение, и определенно "ручной" сброс/возврат, но это работает. Это требует минимального знания git и не нарушает историю коммитов.