git: извлекать файлы из другой ветки в текущую ветку (не переключать HEAD на другую ветку)

Я хочу загрузить другую версию файлов, существующих в другой ветке, в мою текущую ветку.

git help checkout говорит:

DESCRIPTION
   Updates files in the working tree to match the version in the index or
   the specified tree. If no paths are given, git checkout will also
   update HEAD to set the specified branch as the current branch.

Есть ли способ получить все эти файлы, но не обновлять HEAD?


person Kache    schedule 20.03.2013    source источник
comment
@BobbyA Я так не думаю. 1: вопрос и ответ касаются чего-то другого (коллизии имен веток и файлов/папок). 2: этот вопрос старше.   -  person Kache    schedule 12.06.2018
comment
Я отметил неправильный вопрос (несколько вкладок), сразу понял это и снял отметку. Я не знал, что там был комментарий, хотя. Меня поймали! Извиняюсь :) Удаляю этот комментарий сейчас, так как он вводит в заблуждение.   -  person BobbyA    schedule 13.06.2018


Ответы (2)


оформить заказ, указав текущий путь, .:

git checkout other-branch-name -- .

Эта операция аналогична переключению HEAD на другую ветку без извлечения файлов, но только с "другой стороны".

Как упоминает @김민준, это перезаписывает любые незафиксированные изменения. Не забудьте сначала спрятать или зафиксировать их где-нибудь, если это необходимо.

person Kache    schedule 20.03.2013
comment
Напоминаем, что вся ваша незавершенная работа будет отброшена. Очевидно задним числом, но сильно укусил :'( - person 김민준; 16.05.2017
comment
Это самый простой способ выполнить слияние из ветки функций, из которой вы не хотите сохранять все детали. -- . было немного сложно найти, спасибо! - person Laurent Caillette; 29.05.2018
comment
Вы можете объяснить, что -- . на самом деле делает? . здесь и -- без аргументов значит все ? - person red888; 27.08.2018
comment
Насколько я знаю, Git использует -- в качестве разделителя между командами слева и файловыми глобусами справа. - person Kache; 27.08.2018
comment
У меня это не сработало, используя Windows (может быть, другие отличия?) Мне пришлось использовать git checkout <other-branch-name> -- C:\path\to\changes\* - person rythos42; 08.01.2019

Аналогично @Kache answer, но с использованием более нового git restore (требуется Git версии 2.23 или выше):

git restore --source=<other-branch/tag/commit> <pathspec>
# or
git restore -s <other-branch/tag/commit> <pathspec>

# example: to load all files from branch "other"
git restore -s other .

Эта новая команда была введена для разделения извлечения ветки и извлечения файлов из одной команды git checkout. Подробнее: Что такое команда git restore.

person user5532169    schedule 08.06.2021