В настоящее время у меня есть три измененных файла в моем рабочем каталоге. Однако я хочу, чтобы один из них был сброшен в состояние HEAD.
В SVN я бы использовал svn revert <filename>
(а затем svn update <filename>
при необходимости), но в Git я должен использовать git reset --hard
. Однако эта команда не может работать с одним файлом.
Есть ли способ в Git отменить изменения в одном файле и перезаписать его свежей копией HEAD?
git checkout
ниже ответ. В git «возврат» - это то, что вы делаете с коммитом. «Revert» воспроизводит обратную запись исторического коммита в ваш рабочий каталог, так что вы можете сделать новый коммит, который «отменяет» аннулированный коммит. Я нахожу, что это частая путаница для людей, которые приходят в Git из SVN.Ответы:
Вы можете использовать следующую команду:
... который обновит как рабочую копию, так
my-file.txt
и ее состояние в индексе с копией из HEAD.--
в основном означает: обрабатывать каждый аргумент после этой точки как имя файла . Подробнее в этом ответе . Спасибо VonC за указание на это.источник
HEAD~1
чтобы указать предпоследний коммит.HEAD
если вы возглавляете текущую ветку - см. Norbauer.com/rails-consulting/notes/…reset
команда (как она говорит) «не может сделать полный сброс с путями», а затем, почемуcheckout
команда не используется (не может быть?) Для жесткого сброса всего набора? (Я имею в виду, почему это было разработано так.)git checkout
: «Перезаписать пути в рабочем дереве, заменив их содержимым в индексе или в <tree-ish>». Т.е. если<tree-ish>
он опущен, то любой контент в индексе будет использоваться для обновления рабочего дерева. Это может или не может отличаться от HEAD.Сброс к голове:
Для полной перезагрузки одного файла в HEAD:
Обратите внимание, что
@
это сокращение отHEAD
. Старая версия git может не поддерживать краткую форму.Сбросить на индекс:
Чтобы принудительно сбросить отдельный файл к индексу , предполагая, что индекс не пустой, в противном случае к HEAD:
Суть в том, что для безопасности вы не хотите пропускать
@
или неHEAD
указывать команду, если только вы специально не хотите сбросить только индекс .источник
man bash
страницу. Также упоминается в этом ответе: unix.stackexchange.com/a/187548/142855--
используется, чтобы сказать программеI've finished specifying "options", and from here on, everything will be a positional argument.
. Условно «опции» - это токены,--recursive
которые могут появляться в любом порядке или даже объединяться в краткой форме, например, сrm -rf
. Напротив, «позиционные аргументы» гораздо больше похожи на аргументы, передаваемые функции в языке программирования: их позиция в списке токенов определяет, что именно программа собирается с ними делать (это часто имена файлов).--
устраняет двусмысленность относительно того, что есть что.Чтобы вернуться в upstream / master, сделайте:
источник
Начиная с Git 2.23 (август 2019) вы можете использовать
restore
( больше информации ):Выше будет восстановить
MyFile
наHEAD
(последней фиксации) на текущей ветке.Если вы хотите получить изменения от другого коммита, вы можете вернуться назад в историю коммитов. Команда ниже получит
MyFile
два коммита, предшествующие последнему. Теперь вам нужна опция-s
(--source
), так как теперь вы используете,master~2
а неmaster
(по умолчанию) при восстановлении источника:Вы также можете получить файл из другой ветки!
источник
Ссылка на ГОЛОВУ не обязательна.
git checkout -- file.js
достаточноисточник
Вы можете использовать приведенную ниже команду для сброса одного файла
Список всех измененных файлов, чтобы получить
path_to_file/filename
с помощью команды нижеисточник
Вы можете использовать следующую команду:
git reset -- my-file.txt
который обновит обе рабочие копии
my-file.txt
при добавлении.источник
Вы можете использовать следующую команду:
Если у вас есть ветка с тем же именем файла, вы должны использовать эту команду:
источник
Простой, легкий, практичный способ вытащить вас из горячей воды, особенно если вам не очень удобен 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 и не нарушает историю коммитов.
источник