Подтвердить что ты не робот

Что такое "пузырь слияния"?

Я слышал о "пузырях слияния" относительно Git. Я довольно хорошо разбираюсь в Git, но не считаю себя экспертом. Я слышал некоторые негативные вещи о пузырях слияния; что такое "пузырь слияния" в Git, что с ним не так, и как я могу его избежать?

4b9b3361

Ответ 1

Слияние-пузырь - это "тривиальное слияние" в Git, для которого не требуется никаких конфликтов. Пузырь появляется в журнале, где слияние отображается при использовании параметра --graph. например, если вы запустили git log --graph, вы можете увидеть что-то вроде этого:

| |
* |   commit d79f3c4e129356b055c659ee5be28081c1f38aa1
|\ \  Merge: 09bf1ed 4ef9a23
| | | Author: Peter <[email protected]>
| | | Date:   Wed Sep 17 17:21:07 2014 -0400
| | |
| | |     Merge branch 'master' of http://fictitiousrepo.visualstudio.com/DefaultCollection/_git/fictitiousproject
| | |
| * | commit 4ef9a2387f0d4db39a6cab8ff8f531815935c305
| | | Author: Andrew <[email protected]>
| | | Date:   Tue Sep 16 11:54:14 2014 -0500
| | |
| | |     updated changelog
| | |
* | | commit 09bf1ed0125d77c26b5760939c125998bb046e9a
|/ /  Author: Peter <[email protected]>
| |   Date:   Wed Sep 17 17:20:30 2014 -0400
| | 
| |       fixed some bugs

где линии "выпучиваются" - это "пузырь слияния". Это может показаться безобидным; но многие считают его гораздо менее понятным, чем то, что могло бы произойти, что было бы так:

|
* commit 09bf1ed0125d77c26b5760939c125998bb046e9a
| Author: Peter <[email protected]>
| Date:   Wed Sep 17 17:20:30 2014 -0400
|
|     fixed some bugs
|
* commit 4ef9a2387f0d4db39a6cab8ff8f531815935c305
| Author: Andrew <[email protected]>
| Date:   Tue Sep 16 11:54:14 2014 -0500
|
|     updated changelog
|

... потому что никакого слияния не требуется.

Это обычно происходит при принятии запроса на перенос путем автоматического слияния. Иногда это происходило из-за того, как кнопка "Merge Pull Request" использовалась для работы в Github.

Чтобы избежать слияния пузырьков с запросами на тягу, одна стратегия заключается в том, чтобы вручную сливаться. Например:

git checkout master
git remote add remoteorigin git://remotegithost.com/remotegitrepo/remotegitproject
git fetch remoteorigin 
git merge remoteorigin/remoteprojectbranch
git push origin master

Чтобы удалить недавно созданный пузырь слияния из запроса на вытягивание (когда вы не нажали), одна стратегия состоит в том, чтобы сначала спрятать текущие изменения, reset вашу голову до фиксации до пузыря, потянуть с помощью rebase, затем От себя. Например:

git stash save
git reset --hard HEAD~1
git pull --rebase
git push origin HEAD

Ссылка:  http://adammonsen.com/post/1172