Я новичок в Git, и теперь я в этой ситуации:
- У меня есть четыре ветви (мастер, b1, b2 и b3).
- После того, как я поработал на b1-b3, я понял, что мне нужно что-то изменить на ветке master, которая должна быть во всех других ветках.
- Я изменил то, что мне было нужно,
master
и ... вот моя проблема:
Как мне обновить все остальные ветви с помощью master
кода филиала?
git
git-branch
Ionuț Staicu
источник
источник
Ответы:
У вас есть два варианта:
Первый - это слияние, но это создает дополнительный коммит для слияния.
Оформить заказ каждой ветви:
Затем объедините:
Затем нажмите:
Кроме того, вы можете сделать ребаз:
источник
got push origin master
... не имеет смысла. Вы не меняете основную ветку. Я думаю, что это ошибка с 119 upvote: /git rebase master
правильный ответУ вас есть в основном два варианта:
Вы сливаетесь. На самом деле это довольно простая и совершенно локальная операция:
Это оставляет историю в точности так, как это произошло: вы разветвились от мастера, вы внесли изменения во все ветви и, наконец, включили изменения от мастера во все три ветви.
git
может справиться с этой ситуацией действительно хорошо, он предназначен для слияния, происходящего во всех направлениях, в то же время. Вы можете доверять этому, чтобы быть в состоянии собрать все нити вместе правильно. Ему просто не важно,b1
сливается ветвьmaster
илиmaster
сливаетсяb1
, коммит слияния выглядит все равно для git. Разница лишь в том, какая ветвь в конечном итоге указывает на этот коммит слияния.Вы перебазируете. Люди с SVN или подобным опытом считают это более интуитивным. Команды аналогичны регистру слияния:
Людям нравится такой подход, потому что он сохраняет линейную историю во всех отраслях. Однако эта линейная история - ложь, и вы должны знать, что это так. Рассмотрим этот граф коммитов:
Результатом слияния становится реальная история:
Ребаз, однако, дает вам эту историю:
Дело в том, что коммиты
E'
,F'
иG'
никогда по- настоящему существует, и никогда , вероятно , не были испытаны. Они могут даже не скомпилироваться. На самом деле довольно легко создавать бессмысленные коммиты через ребаз, особенно когда измененияmaster
важны для разработки вb1
.Следствием этого может быть, что вы не можете определить , какой из трех коммитов
E
,F
иG
фактически ввел регрессию, уменьшая значениеgit bisect
.Я не говорю, что вы не должны использовать
git rebase
. Это имеет свое применение. Но всякий раз, когда вы используете его, вы должны осознавать тот факт, что вы лжете об истории. И вы должны по крайней мере скомпилировать тест новых коммитов.источник
git checkout <source branch>
git pull
. Тогда продолжаем с выше:git checkout b1
...git merge
иgit rebase
. Там не избежать этого.git rebase
обладает тем преимуществом, что позволяет скрывать несколько этапов перебазировки (т.е. перебазировать одну и ту же ветку на несколько разных коммитов последовательно, чтобы уменьшить количество конфликтов на каждом этапе). Тем не менее, сам факт того, что ребаз лжет об истории, намного проще испортить добро в таком многоступенчатом ребазе ... Вот почему я всегда предпочитаю слияние, даже когда это означает, что мне нужно загромождать историю несколькими коммитами слияния ,git rebase master
это правильный способ сделать это. Слияние будет означать, что для слияния будет создан коммит, а перебазирование - нет.источник
Если вы работали над веткой время от времени или в других ветвях происходило много всего, когда вы работали над чем-то, лучше перенести вашу ветку на master. Это поддерживает историю в чистоте и делает вещи намного легче следовать.
Ноты:
На сайте http://git-scm.com/book/ch3-6.html есть глава о перебазировании и множество других ресурсов в Интернете.
источник
@cmaster сделал лучший подробный ответ. Вкратце:
Вы не должны переписывать историю ветвей, а сохранять их в актуальном состоянии для будущих ссылок. При слиянии с мастером создается один дополнительный коммит, но это дешево. Коммитов не стоит.
источник
Для обновления других веток, таких как (резервная копия), с вашей копией главной ветки Вы можете следовать в любом случае (перебазировать или объединить) ...
Слияние веток (будет дополнительная фиксация автоматически в резервную ветку).
Примечание: Rebase - это не что иное, как создание новой базы (новой копии)
(Повторите для других веток, если они есть, например, backup2 и т. Д.,)
(Повторите для других веток, если они есть, например, backup2 и т. Д.,)
источник
Вы можете объединить или применить отдельные коммиты к веткам с помощью git cherry-pick .
источник
Есть два варианта этой проблемы.
1) git rebase
2) git merge
Только в случае слияния с обоими выше в случае слияния, будет иметь дополнительный коммит в истории
1) ветка git checkout (b1, b2, b3)
2) git rebase origin / master (в случае конфликтов разрешите локально, выполнив git rebase --continue)
3) git push
Альтернативно, опция git merge аналогична
1) git checkout "your_branch" (b1, b2, b3)
2) мастер слияния
3) git push
источник
обновить ветку от мастера:
источник