В тот момент, когда он не может объединить свои изменения, потому что Алиса вошла туда первой ...
Вот где твой вопрос идет не так. Он может слиться, потому что у него еще нет слияния Алисы. То, что он не может сделать успешно - потому что Алиса бьет его ударом - это git push
его слияние с другим Git.
После неудачного git push
Боб должен отступить назад и запустить git fetch
. Теперь Боб имеет (и должен наблюдать) слияние Алисы. Если Боб решит перешагнуть через все, он может в своем репозитории переопределить слияние Алисы - в конце концов, репозиторий Боба - это Боб, как и хотелось бы Бобу, но если он использует механизмы по умолчанию,Git обеспечивает разделение работы, он:
- перебазирует свои коммиты, чтобы прийти после слияния Алисы (отбрасывая его слияние в процессе), или
- отменить его текущее слияние (этонемного хитро, но Боб может использовать
git rebase -i
, чтобы сделать это легко), а затем повторно объединить слияния Алисы, или - самый простой метод: объединить его слияния с объединением Алисы.
Все три метода имеют тенденцию к успеху автоматически или имеют конфликты, в которых Боб, вероятно, лучше всего подходит для определения правильного разрешения. Результатом является то, что Боб может теперь git push
успешно, без использования --force
.
Давайте снова рассмотрим все три случая:
Перебазировать при слиянии Алисы.
Здесь Боб решает заменить свои старые серии коммитов (которые идут параллельно с работой Алисы) новыми и улучшенными перебазированными коммитами (которые приходят после работы Алисы). Поскольку они начинаются с модифицированной базы кода Алисы, они сохраняют изменения Алисы.
Полностью откажитесь от текущего слияния (MB
), оставив его серию параллельных коммитов с Алисой, но нетКоммит слияния в конце.
Здесь Боб объединяет свою серию коммитов с результатом слияния Алисы. Поскольку в ее результат слияния включен ее код, в результат слияния Боба также включен код Алисы, если только Боб не удалит его по какой-либо причине.
Слияние со слиянием Алисы.
Здесь Боб сохраняет MB
(из связанных вопросов и ответов), но добавляет новое слияние, которое объединяет MB
с MA
. Это объединяет изменения Алисы с изменениями Боба, поэтому работа Алисы включена в ее окончательный результат.
Разница между этими тремя вариантами заключается в конечном графике и наборе коммитов: какТрудно ли это прочитать (как коммиты, так и график), как сложно использовать их в будущем для обнуления при любых введенных ошибках и так далее. Есть аргументы для всех трех процессов и аргументы против всех трех. Алиса и Боб должны согласиться с любой процедурой, которую они используют, но это соглашение не является частью инструментов, предоставляемых Git.