Второй вопрос проще. fetch
просто обновляет удаленные стеллажные ветви вашего текущего хранилища из удаленного хранилища (обычно источника), pull
выполняет выборку, а затем объединяет удаленную ветку с текущей извлеченной веткой. Точные ветки, извлекаемые и объединяемые, могут зависеть от конфигурации, но git пытается «сделать все правильно» и преуспевает в большинстве распространенных установок.
Первый вопрос немного сложнее, потому что новые ветки могут быть созданы в любой точке любого репозитория из любого коммита в истории данной ветки. Во многих репозиториях большинство «нормальных» ветвей так или иначе являются ответвлениями друг друга.
Что вы можете сделать, это посмотреть на все ветви git branch
, git branch -a
или git show-ref --heads
для более скриптовой версии и посмотреть, как ветви связаны с симметричной разницей.
git log --oneline --left-right branch-a...branch-b
Это покажет коммиты, которые не являются общими для двух ветвей, с префиксом <
или >
, чтобы показать, на какой ветке они находятся.