Примечание модератора: Учитывая, что на этот вопрос уже было отправлено шестьдесят семь ответов (некоторые из них удалены), подумайте, действительно ли вы ] добавив что-то новое , прежде чем опубликовать еще один.
Каковы различия между git pull
и git fetch
?
Простым языком, git pull
делает git fetch
сопровождаемый git merge
.
можно сделать git fetch
в любое время для обновления удаленно отслеживающих ответвлений под refs/remotes/<remote>/
.
Эта операция никогда не изменяет ни одного из Ваших собственных локальных ответвлений под refs/heads
и безопасна обойтись без изменения Вашей рабочей копии. Я даже услышал о людях, работающих git fetch
периодически в задании крона в фоновом режиме (хотя я не рекомендовал бы делать это).
А git pull
- то, что Вы сделали бы для обеспечения локального ответвления, актуального с его удаленной версией, также обновление другого удаленного отслеживания переходит.
документация Мерзавца †“ получение по запросу мерзавца :
В ее режиме по умолчанию,
git pull
стенография дляgit fetch
сопровождаемый [1 110].
git-pull - Fetch from and merge with another repository or a local branch SYNOPSIS git pull … DESCRIPTION Runs git-fetch with the given parameters, and calls git-merge to merge the retrieved head(s) into the current branch. With --rebase, calls git-rebase instead of git-merge. Note that you can use . (current directory) as the <repository> to pull from the local repository — this is useful when merging local branches into the current branch. Also note that options meant for git-pull itself and underlying git-merge must be given before the options meant for git-fetch.
Вы вытянули бы, если бы Вы хотите объединенные истории, Вы выбрали бы, если Вы просто 'хотите коды', поскольку некоторый человек отмечал некоторые статьи здесь.
Вкратце:
Выборка Мерзавца похожа на ВЫБОР SQL. Это только покажет Вам что-то, но не обновит или изменит что-либо.
Получение по запросу Мерзавца похоже на ВЫБОР SQL тогда после этого, обновите мою локальную копию.
Все ответвления хранятся в .git/refs
, Все локальные ответвления хранятся в .git/refs/heads
, Все удаленные ответвления хранятся в .git/refs/remotes
git fetch
фиксации загрузок команды, файлы и судьи из удаленного репозитория в Ваш локальный repo. Выборка - то, что Вы делаете, когда Вы хотите видеть то, что все другие продолжали работать.
Поэтому, когда Вы делаете git fetch
, все файлы, фиксации и судьи загружаются в этом .git/refs/remotes
, можно переключиться на эти ответвления для наблюдения изменений. Можно объединить их, если Вы хотите.
git pull
просто загрузки эти изменения и также объединяет их с текущим ответвлением.
Я просто хочу добавить маленькую дополнительную информацию. Получение по запросу мерзавца
git fetch
сопровождается
git merge --ff
, Эта опция, добавленная к слиянию, является причиной, почему это не создает фиксацию слияния.
Потрясающая Статья об этой теме: https://www.git-tower.com/learn/git/faq/difference-between-git-fetch-git-pull