Я слышал о "пузырях слияния" относительно Git. Я довольно хорошо разбираюсь в Git, но не считаю себя экспертом. Я слышал некоторые негативные вещи о пузырях слияния; что такое "пузырь слияния" в Git, что с ним не так, и как я могу его избежать?
Что такое "пузырь слияния"?
Ответ 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