У меня есть 2 филиала git branch1 и branch2, и я хочу объединить file.py в branch2 в file.py в branch1 и только этот файл.
По сути, я просто хочу работать с file.py в branch1, но хочу воспользоваться командой слияния. Каков наилучший способ сделать это?
Ответы:
Когда содержание находится в
file.py
от branch2 , который больше не относится к branch1 , требует сбора некоторых изменений и оставить другие. Для полного контроля выполните интерактивное слияние с помощью--patch
переключателя:В разделе интерактивного режима на странице
git-add(1)
справочника объясняются ключи, которые должны использоваться:Команда split особенно полезна.
источник
git init <dir>
) и, наконец, выбросить (rm -r <dir>
) так просто.Хотя само по себе это не слияние , иногда требуется все содержимое другого файла в другой ветви. Сообщение в блоге Джейсона Рудольфа предоставляет простой способ копировать файлы из одной ветви в другую. Примените технику следующим образом:
Сейчас
file.py
сейчас в ветке1 .источник
file.py
с тем, что находится в ветви 2.Ни один из других текущих ответов на самом деле не «объединит» файлы, как если бы вы использовали команду слияния. (В лучшем случае они потребуют от вас ручного выбора различий.) Если вы действительно хотите воспользоваться преимуществами объединения с использованием информации от общего предка, вы можете выполнить процедуру, основанную на процедуре, описанной в разделе «Расширенное объединение» в git. Справочное руководство.
Для этого протокола я предполагаю, что вы хотите объединить файл 'path / to / file.txt' из origin / master в HEAD - при необходимости измените. (Вам не обязательно находиться в верхнем каталоге вашего хранилища, но это помогает.)
git merge-file должен использовать все настройки по умолчанию для слияния для форматирования и тому подобное.
Также обратите внимание, что если ваша «наша» версия рабочей копии, и вы не хотите быть слишком осторожным, вы можете работать непосредственно с файлом:
источник
Все ли изменения в
file.py
inbranch2
в их собственных коммитах отделены от изменений в других файлах? Если это так, вы можете простоcherry-pick
внести изменения:В противном случае,
merge
не работает по отдельным путям ... вы могли бы просто создатьgit diff
патчfile.py
изменений изbranch2
иgit apply
их кbranch1
:источник
Можно
stash
иstash pop
файл:источник
Чтобы объединить только изменения из Branch2, оставьте
file.py
другие изменения без изменений.Слияние никогда не будет даже смотреть на любой другой файл. Вам может понадобиться '-f' оформить заказ, если деревья достаточно разные.
Обратите внимание, что из-за этого Branch1 будет выглядеть так, как будто все в истории Branch2 к этому моменту было объединено, что может быть не тем, что вы хотите. Лучшая версия первой проверки выше, вероятно,
в этом случае сообщение коммита, вероятно, также должно быть
источник
Я нахожусь в той же ситуации, я хочу объединить файл из ветки, в которой много коммитов на 2 ветке. Я пробовал много способов выше и других, которые я нашел в интернете, и все не удалось (потому что история коммитов сложна), поэтому я решил сделать свой путь (сумасшедший путь).
источник
То, что я сделал, немного ручное, но я:
revert
;HEAD~1
, то есть их состояние в коммите слияния;Гадкий? Да. Легко вспомнить? Тоже да.
источник