Я не уверен, что ваш вопрос, но думаю, что есть две вещи, которые здесь происходят вы можете не полностью понять.
Во-первых, я не думаю, что git merge master coins
делает то, что вы думаете.
git merge master coins
не сказать слиться master
в coins
. В нем говорится о слиянии master
иcoins
в проверяемую отрасль. Это потому, что master coins
- это список ветвей, которые нужно объединить в текущую ветку. From the docs ...
[мерзавец слияние] включает в себя изменения из названных фиксаций (со времени их истории расходились от текущей ветви) в текущей ветви.
Если master
выдан, то он объединяет монеты в мастер. Если выдается coins
, то он объединяет master
в coins
. Если что-то еще проверено, вы получаете так называемое «слияние осьминога» и все три, master
, coins
, а текущая ветка объединяется в то, что, вероятно, большой беспорядок.
Как указано, вы слились с master
, так что git merge master coins
- это то же самое, что и git merge coins
. Вы объединили coins
в master
, который, я думаю, вы хотели, но это могло бы испортиться.
Поэтому не используйте этот синтаксис; это может вызвать у вас проблемы, и трудно понять, что на самом деле произошло, глядя на историю команд. Вместо этого используйте git checkout branch-to-merge-into; git merge branch-to-merge-from
. Поэтому, если вы хотите слиться с монетами в мастер, git checkout master; git merge coins
.
Следующий выпуск касается ускоренного слияния. Это то, что Гит делает, когда нет необходимости в слиянии, когда ветви не расходятся. Например, предположим, что у вас это ...
A - B - C - D - G [master]
\
E - F - H [feature]
С master
имеет изменения, которые не являются общими с feature
(D и G), она должна сливаться. Итак, git checkout master; git merge feature
приводит к новому слиянию.
A - B - C - D - G - I [master]
\ /
E - F - H [feature]
Но если бы не было никаких новых фиксаций на master
, у вас есть это (master
указывает на C).
[master]
A - B - C - E - F - H [feature]
feature
, как говорят, не отклонялись от master
. Нет необходимости в слиянии, поэтому Git не беспокоится об этом. Когда вы git checkout master; git merge feature
он просто перемещает master
Н.
[master]
A - B - C - E - F - H [feature]
Git может это сделать, потому что «ветви» действительно только этикетки, указывая на фиксацию. Теперь master
и feature
точка с тем же фиксацией.
Я рекомендую избегать быстрой перемотки вперед при слиянии ветвей функций, поскольку он теряет важную археологическую информацию. Кто-то, смотрящий на репозиторий позже, не может сказать, что E, F и H были сделаны как одна ветвь.
Я рекомендую всегда объединять ветви функций с git merge --no-ff
. Это заставляет Git совершать слияние, и кто-то, кто пытается понять ваш код в будущем, может знать, что E, F и H являются частью большего целого.
A - B - C --------- I [master]
\ /
E - F - H [feature]
Слияния фиксация, я, также дает вам место для описания отрасли и добавить такие вещи, как ссылка на вопрос/ошибку/билет, описывающее то, что филиал был для.
Не «Ваша ветка актуальна с« происхождением/мастером »? Указывает, что ничего не вытащить? –
Не могли бы вы дать нам 'git log -graph -decorate'? Это покажет ветви ветвей и соединения. В противном случае я не уверен, в чем ваш вопрос? Это похоже на обычное [быстрое переключение] (http://stackoverflow.com/questions/2850369/why-does-git-fast-forward-merges-by-default#2850413) (т. Е. Не требуется никакого слияния потому что не было никаких изменений в 'master', так как« монеты »разветвлены, поэтому он просто перемещает« master »туда, где« монеты »). Кроме того, вы хотели объединить 'master' в' монеты', а не 'монеты' в' master'? – Schwern