2015-09-25 3 views
2

Я знаком с ClearCase, где мы можем объединить файл с веткой из любой другой ветки. Как это возможно в git? Для, например, у меня есть следующая структураGit: Слияние с веткой из другой ветви с помощью Kdiff3

master--->branch_2 
    | 
    | 
    V 
branch_1 

Так что есть некоторое независимое развитие происходит в branch_1 и branch_2. Я хочу объединить определенный код от branch_2 до branch_1, используя некоторый mergetool, такой как kdiff3.

EDIT: Kdiff3 имеет удивительную возможность слияния, сравнивая 2 или 3 версии файла (из той же самой или другой ветви), выделяя конфликты. Затем мы можем перепрыгнуть через каждый конфликт и выбрать код из 1 или более версий файла, внести некоторые изменения (при необходимости) и, наконец, сохранить файл. Эта функция была очень удобна для меня, когда я работал с ClearCase. Есть ли способ настроить git mergetool с kdiff3 для работы одинаково?

Заранее спасибо

+0

Что вы имеете в виду под "_some конкретного code_"? Вы хотите объединить некоторые конкретные _commits_, некоторые _files_ из определенных коммитов или только некоторые _changes_ из определенных файлов в определенные коммиты? Вы можете сделать любой из них :) –

ответ

1

Это звучит, как вы хотите объединить определенную часть изменений от указанного коммита в branch_2.

Если это так, то вы можете использовать git cherry-pick --no-commit или (-n), чтобы применить изменения от фиксации в branch_2без создания нового коммита. С этого момента вы можете решить, какие изменения необходимо совершить, организовав только части измененных файлов.

Вот пример:

git checkout branch_1 
git cherry-pick -n <some-commit> # 1. Apply the changes from some commit in branch_2 
            # without creating a new commit 
git reset HEAD     # 2. Unstage all changes from that commit 
git add -p      # 3. Decide which changes to include in the commit 
git commit      # 4. Commit those changes 
0

быть на целевой отрасли:

git checkout branch1 

Редактировать код branch1, а ссылаюсь на branch2 версии

git difftool branch2 -- file.txt 

Фиксировать изменения как обычный

git add file.txt 
git commit 
+0

Но команда diffftool просто дает мне diff для файла между двумя ветвями. Он не предоставляет возможность слияния ... – balajimc55

+0

'git diff' просто дает разницу. 'git difftool' вызывает текущий сконфигурированный diffftool. Если это diffftool, который имеет возможность редактирования или слияния (например, vimdiff - возможно, даже kdiff3, я никогда не использовал его), вы сможете объединиться (как в edit-merge, а не 'git merge'). Если у вас есть конкретные коммиты, которые вы хотите переместить в другую ветку, а не использовать инструмент слияния, чтобы выбрать то, что вы пожелаете, используйте предложение Андреаса. – Amadan

+0

О, извините. Под «diff» я фактически имел в виду «разницу»; а не «git diff». В любом случае, теперь я понимаю, что вы имеете в виду.Я использую kdiff3, и я не могу редактировать, когда он показывает различия (по крайней мере, не то, что я знаю). Я могу вносить изменения только путем вызова его из команды git mergetool. Спасибо, в любом случае!! – balajimc55

1

Стоя в branch_1, вы можете просто cherry-pick, что бы вы не пожелали от branch_2.

git cherry-pick <some sha1> 

Вы также можете перебазироваться свою работу в branch_1 так он приходит после того, как branch_2

git rebase --onto branch_2 branch_1 
+0

Спасибо. Есть ли способ интегрировать git cherry-pick с функцией слияния kdiff3? – balajimc55

+0

Я считаю, что если вы столкнулись с конфликтом с выбором вишни, вам просто нужно запустить kdiff3 для разрешения конфликта, как и при любом конфликте. –

Смежные вопросы