У меня есть две ветви (A и B), и я хочу объединить один файл из ветви A с соответствующим одним файлом из ветви B.
git
merge
git-branch
Isuru
источник
источник
git diff branch_name > patch
git apply patch
, stackoverflow.com/a/9473543/1091853Ответы:
Я столкнулся с той же проблемой. Если быть точным, у меня есть две ветви
A
иB
с одними и теми же файлами, но с другим интерфейсом программирования в некоторых файлах. Теперь методы файлаf
, который не зависит от различий интерфейса в двух ветвях, были изменены в веткеB
, но это изменение важно для обеих ветвей. Таким образом, мне нужно просто объединить файлf
филиалаB
в файлf
филиалаA
.Простая команда уже решила проблему для меня, если я предполагаю, что все изменения зафиксированы в обеих ветках
A
иB
:Первая команда переключается в ветку
A
, в которую я хочу объединитьB
версию файлаf
. Вторая команда исправляет файлf
сf
изHEAD
изB
. Вы можете даже принять / отменить отдельные части патча. Вместо того,B
чтобы указать здесь любой коммит, это не обязательно должно бытьHEAD
.Сообщество редактирование : Если файл
f
наB
не существует наA
еще, то опустит--patch
вариант. В противном случае вы получите «Без изменений». сообщение.источник
git checkout --patch B -- f
чтобы заставить это работать.a
во время интерактивной фазы, вместо того, чтобы нажиматьy
каждый раз. Или используйтеgit checkout B -- f
команду вместо.Вот что я делаю в этих ситуациях. Это клудж, но он прекрасно работает для меня.
Я попытался исправить, и моя ситуация была слишком уродлива для этого. Короче, это будет выглядеть так:
Рабочая ветвь: Экспериментальная ветвь: B (содержит файл file.txt, в котором есть изменения, которые я хочу добавить.)
Создать новую ветку на основе A:
Слить B в tempAB
Скопируйте sha1-хеш слияния:
Оформите свою рабочую ветку:
Оформите ваш исправленный файл:
И там у вас должно быть это. Зафиксируйте свой результат.
источник
A
отклонился отB
начала другими способами. Копирование переопределит эти различия.Это использует внутренний diff-инструмент git. Может быть, немного работы, но прямо вперед.
источник
--
(пустая метка аргумента), в git checkout docs: ARGUMENT DISAMBIGUATION говорят: «используйте,git checkout -- <pathspec>
если вы хотите извлекать эти пути из индекса». Это потому, что вы можете иметь как ветку, так и файл / путь с одним и тем же именем. В таких случаях вместо того, чтобы просить вас устранить неоднозначность, следует ли извлекать ветку или путь, если оба существуют, git по умолчанию выберет извлечение ветки. Однако, если--
предшествует, git извлечет файл / путь вместо этого.Я нашел этот подход простым и полезным: как «объединить» определенные файлы из другой ветки
Пожалуйста, прочитайте всю статью для большего понимания
источник
-p
опции в этой команде. Который затем перезаписывает любые части в вашем файле рабочего дерева, которые ранее были отклонены от ветви, из которой вы извлекаете, к сожалению, до изменения патча.Вы можете использовать:
Совет: https://www.kernel.org/pub/software/scm/git/docs/git-merge-file.html.
источник
git merge-file
Следующая команда (1) сравнит файл правильной ветки, чтобы master (2) в интерактивном режиме запросил, какие изменения применить.
git checkout --patch master
источник
Мое редактирование было отклонено, поэтому я прилагаю, как обрабатывать слияния изменений из удаленной ветви здесь.
Если вам нужно сделать это после неправильного слияния, вы можете сделать что-то вроде этого:
источник
Предполагая, что B является текущей ветвью:
Обратите внимание, что это относится только к изменениям в локальном файле. Вам нужно будет совершить потом.
источник
error: <file-path>: already exists in working directory
git diff Branch_A <file-path, filename> -- hash_commit > file_name.temp
Вы можете извлечь старую версию файла для слияния, сохранив ее под другим именем, а затем запустить любой инструмент слияния для двух файлов.
например.
git show B:src/common/store.ts > /tmp/store.ts
(где B - имя ветви / коммит / тег)meld src/common/store.ts /tmp/store.ts
источник
Я сделаю это как
git format-patch branch_old..branch_new file
это произведет патч для файла.
Примените патч к цели branch_old
git am blahblah.patch
источник