2014-12-09 3 views
3

Если и B работают на одной и той же мерзавца репо и толкает изменения на эту ветку: A-feature к репо ДО В, B Теперь нужно сделать тянуть, прежде чем он может От себя.Когда мне нужно вытащить, прежде чем я смогу нажать Git?

Но где точное условие для описанного? Например. применимо ли оно к любым изменениям в любом филиале, перенаправленном на репо? Или это только если A и B нажимают на ту же ветку? Это означает, что B может нажать на B-feature, хотя A просто нажал на A-feature перед ним?

+2

Должно быть возможным нажать на другую ветку без натяжения. – Karussell

ответ

4

Это означает, что B может нажать на B-функцию, даже если A-а нажал на A-функцию перед ним?

Да. Предупреждение вы получите только тогда, когда вы подталкиваете к ветви обновляемого кто-то другим:

hint: Updates were rejected because the tip of your current branch is behind 
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull') 
hint: before pushing again. 

единственной альтернатива git pull бы git push --force (который будет перезаписать историю, опубликованную A с B-х, если B должны были нажать на A-feature, и это плохо.).
См. "git push --force, behind the scenes".

Если никто, кроме B не работает на B-feature, не тянуть, не требуется, когда B хочет подтолкнуть местную B-feature ветвь вверх по течению репо: толкающий будет быстро вперед один: вы добавляете новые коммиты на вершине удаленная ветка.

+0

Можете упомянуть силу нажатия. – Jubobs

+1

@ Jubobs True. Я добавил ссылку на более старый ответ, который иллюстрирует эффект «git push -force»: http://stackoverflow.com/a/23434601/6309 – VonC

+0

Прохладный. Приятно иметь целый банк старых ответов: – Jubobs

3

Причина, по которой B необходимо будет втянуть изменения А, прежде чем он (или она) может внести свои изменения в эту ветвь, заключается в том, что иначе B будет переписывать историю (удаление А совершает в пользу их собственных) и коммиты А (которые не являются частью локальной ветви Б) будут потеряны.

Это только в случае, если вы нажмете на ту же ветку, так что да, B может нажать на другую ветку, не заставляя сначала атаковать A. В этом случае слияние коммитов А и В будет происходить позже, когда их филиалы будут объединены.

Если вы сделать хотят нажать на удаленный филиал, даже если он содержит коммиты, которые не в ближайшем отделении, вы можете поручить мерзавец не предупредить вас, и продолжать с нажимом в любом случае, используя git push --force (или git push -f). Однако будьте осторожны, как и в большинстве случаев (особенно когда вы работаете вместе с другими людьми), это не рекомендуется делать. Записи, которые не находятся в вашей локальной ветке, будут удалены из удаленной ветви.

2

Каждая ветка в Гит - это хронологическая последовательность совершений.

Если вы хотите нажать фиксацию, которая не основана на последней фиксации этой ветви, сначала нужно выполнить промежуточную фиксацию (которая может включать ручное слияние).

Это только проблема, когда несколько пользователей нажимают на одну ветвь. Когда каждый пользователь работает отдельно в личной ветке, им никогда не придется тянуть до нажатия. Если, конечно, они намеренно не захотят объединить ветку другого.

Смежные вопросы