Обычный сценарий состоит в том, что вы делаете подтягивание, прежде чем вы вносите изменения.Но может случиться так, что текущий предок ваших коммитов такой же, так как вы извлекли в последний раз (то есть все остальные еще ничего не выдвинули), что означает, что слияние не требуется, и вы можете просто проталкивать свои изменения без необходимоститянуть.
После того, как кто-то еще поместил свои изменения между ними, вы всегда должны тянуть свои изменения в свои (это где git создает то, что называется коммитом слияния, то есть коммит, который не имеетбыл создан обычным способом с помощью git add, git commit и т. д.).Теперь ваш репозиторий синхронизирован с последними изменениями, и вы можете спокойно нажать, чтобы синхронизировать центральный репозиторий с вашим.
В этом случае вы должны сначала извлечь, что означает, что C не будет перезаписан, так как оба репозитория имеютта же версия (помните, что вы изменили только B в обоих репо).
В случае B, когда у вас есть две расходящиеся версии, которые должны быть объединены с помощью git, могут возникнуть конфликты.Но это именно то, что является извлечением, это выборка (для синхронизации ваших репозиториев) и слияние между вашей локальной ветвью, которая отслеживает удаленную ветвь, например, master объединяется с origin / master.
И, наконец,то же самое произойдет и с A, изменения, внесенные в первом репо в A, будут тривиальным слиянием с A в другом репозитории, поскольку модифицированный A модифицирован из той же версии (идентичных BLOB-объектов) A в другом репо.
Надеюсь, это прояснило некоторые вещи.
Ура!