2015-11-24 2 views
0

Укороченного варианта вопроса

Учитывая следующую структуру филиала:Merge филиала филиала в мастер без слияния средней ветви

*----*-----* 
master   \ 
       *--*---*------*-*---* 
       A     \ 
             *----* 
            hotfix 

Можно ли объединить только изменений, внесенные в hotfix в masterбез с пометкой любая изменение сделанное в Feature A?

Во время разработки Feature A, файл_1 был изменен. Во время hotfix, file_1 и file_2 были изменены.

Я хочу, чтобы изменения по строкам, введенные в hotfix, были объединены в master. То, что я не хочу, это точный файл, который находится в hotfix, чтобы перезаписать файл в master, потому что тогда он будет содержать Feature A изменений.

Backstory

Я работаю на нашем сервере разработки. У меня есть ветвь мастера, которая (почти) является точной копией живого сервера. Когда я хочу реализовать новые функции, я создаю ветку от мастера, вношу изменения и загружаю на сервер разработки. Как только я доволен изменениями, я объединю их в мастер и перетаскиваю изменения на живой сервер.

Я работаю над Feature A, который занимает очень много времени, чтобы реализовать и затрагивает многие файлы. Перед заполнением Feature A Я хочу работать на hotfix. Я могу проверить master и оттуда оттуда для моего исправления, однако все файлы на сервере разработки в настоящее время содержат код для Feature A. Я не хочу, чтобы Feature A прекратил работать на dev, пока я работаю на hotfix. Таким образом, я разветвил Feature A.

Я закончил мой hotfix, и я хочу объединить его в мастер. Однако я не хочу любойFeature A код, чтобы сделать его master.

Предоставление конфликтов слияния, возможно ли это?

ответ

1

Поскольку ветви действительно только по имени зафиксируется, ваша история на самом деле выглядит следующим образом: (Последние фиксации сверху)

* 9999 [hotfix] 
| 
* 8888 
| 
* 7777 
| 
* 6666 [A] 
| 
* 5555 
| 
* 4444 
| 
* 3333 [master] 
| 
* 2222 
| 
V 

$ git checkout hotfix 

Во-первых, позволяет сохранить указатель на оригинальную hotfix и называют его A-hotfix:

$ git branch A-hotfix 

Теперь возьмите все фиксаций от A в hotfix, и воспроизводить их на коммит, где master точки:

$ git rebase --onto master A hotfix 
+0

Должен ли я быть на определенной ветке, когда запускаю 'git rebase -onto master A hotfix'? – MrMisterMan

+0

Нет. Проверьте 'git help rebase'. Вы увидите, что последний аргумент - это ветка для переадресации. –

+0

Спасибо этой работе отлично. – MrMisterMan

1

Сделайте git rebase --onto master A hotfix. Это приведет к переустановке коммитов в исправлении, но не в ветке A на кончике главной ветви. После этого вы можете объединить их в свою мастер-ветку, как всегда.

+0

Должен ли я быть на конкретной отрасли, когда я бегу 'перебазироваться мерзавец --onto освоить hotfix'? – MrMisterMan

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