GIT объединить мастер в ветку

48106
mnml

Я разрабатывал новую функцию в новой ветке, и на ее стороне было внесено немало изменений в основную ветку.

Можно ли объединить основную ветку с моей новой веткой, чтобы поддерживать ее в актуальном состоянии, чтобы у меня не было слишком много конфликтов слияния после завершения новой функции?

45
Вы пробовали git-merge? Помощь [здесь] (http://www.kernel.org/pub/software/scm/git/docs/git-merge.html). karatedog 13 лет назад 0

1 ответ на вопрос

52
Christoffer Hammarström

Вы можете либо, git merge masterлибо git rebase master, в этом случае я бы предпочел git rebase .

Потому что git rebaseделает так, как будто изменения в ветви функций были сделаны поверх изменений в основной ветви, что упрощает граф версий.

Взяв пример из руководства по git rebase :

 A---B---C feature A'--B'--C' feature / --rebase--> / D---E---F---G master D---E---F---G master 

Однако git rebaseподходит только тогда, когда ветвь не была распределена, или возникнет путаница и дополнительная работа в нисходящем направлении, потому что старые коммиты A, B, C теперь стали новыми коммитами A ', B', C '.

Если кто-то потянул вашу ветку или вы куда-то ее подтолкнули, вы должны вместо этого слиться с ней, чтобы избежать путаницы и дополнительной работы на другом конце. См. Восстановление из восходящей версии .

 A---B---C feature A---B---C---M feature / --merge--> / ,---’ D---E---F---G master D---E---F---G master 
Вы должны объяснить, почему вы предпочитаете rebase и в чем разница. Rebase создает линейную историю - это может не соответствовать этому вопросу. Andreas Rehm 13 лет назад 0
Хорошо, если я это хорошо понимаю: мне нужно оформить основную ветку, если newfeature еще не закончена, и выполнить ребаз, если она закончена? mnml 13 лет назад 0
Нет, с отмеченной веткой возможностей выполните `git rebase master`, и она" перебазирует "изменения в ветви функций, чтобы они" основывались "на изменениях в основной ветке. Если изменения в основной ветви вступают в конфликт с изменениями в ветви функций, git попросит вас разрешить их и продолжить, пропустить или прервать. Если вы не уверены, что можете проверить тестовую ветку, чтобы попробовать ее с `git checkout -b test-feature feature` (при условии, что ваша ветвь функции называется" feature "). Christoffer Hammarström 13 лет назад 0
Я выполнил перебазирование, но теперь, когда я извлекаю данные с другого компьютера, я больше не вижу свою ветку: я выполнил git checkout newfeature / git rebase master mnml 13 лет назад 0
Что значит "больше не вижу мою ветку"? В любом случае, `git rebase` следует использовать только в том случае, если ветвь не была распространена, что, как я предполагал, имело место, поскольку вы сказали, что это новая ветка, извините за это. См. [Восстановление из основной ветки разработки] (http://www.kernel.org/pub/software/scm/git/docs/git-rebase.html#_recovering_from_upstream_rebase) в документах, с которыми я связан. Вместо этого вам придется использовать `git merge`. И вы можете использовать `git reflog`, чтобы найти предыдущий заголовок ветки функций, если вы хотите вернуть его обратно. Christoffer Hammarström 13 лет назад 2
ааа ладно, не волнуйтесь, у меня есть копия в другой папке, я просто пытаюсь понять, как использовать эти вещи. Это немного странно, потому что теперь у меня есть нераспределенная ветвь с именем newfeature, и я не знаю, как ее протолкнуть :) mnml 13 лет назад 0
Это от происхождения / мастера или от местного / мастера? khaled_webdev 6 лет назад 0
Я никогда не видел более четкого объяснения различий между слиянием и перебазированием. Спасибо. Paulo Pedroso 5 лет назад 0

Похожие вопросы