Коммиты в branch1 также присутствуют в branch2, поэтому слияние двух ветвей приводит к самой branch2, которая включает в себя branch1.
Причина в том, что в истории модификации, которая привела к ветке 2, у вас есть все изменения в ветке 1, т. Е. Рабочее дерево определяется этими модификациями:
- (коммит 1, из ветви 1) начните с мастера, создайте файл
b1.txt
и напишите "line added in branch1"
в common.txt
- (коммит 2, из ветви 2) начните с ветви 1, удалите
b1.txt
, создайте b2.txt
и измените "branch1"
с "branch2"
в common.txt
вам нужно переписать историю branch2, чтобы два коммита были объединены в один со следующим набором изменений:
- (объединенная фиксация) начните с мастера, создайте файл
b2.txt
и напишите "line added in branch2"
в common.txt
Чтобы получить это, вы должны rebase branch2
и squash коммитов. Обратитесь к странице руководства для git-rebase, чтобы узнать, как это сделать. Или, если в Branch2 есть только один коммит, вы можете просто повторно зафиксировать текущее рабочее дерево, начиная с master
вместо branch1
. Это делается из branch2
с чистым рабочим деревом и индексом:
git reset --soft master
git commit
Затем вы можете объединить как ветку 1, так и ветку 2 в мастер (или друг в друга) и получить желаемый результат