Проще говоря, если вы собирались сесть на самолет без интернета ... перед отъездом вы можете просто сделать git fetch origin <master>
. Он будет загружать все изменения на ваш компьютер, но держать его отдельно от вашей локальной разработки / рабочей области.
В самолете вы можете вносить изменения в локальное рабочее пространство, а затем объединять его с тем, что вы получили, и разрешать потенциальные конфликты объединения без Интернета. И если кто-то не сделал новые конфликтующие изменения в удаленном репо, то, как только вы прибудете в пункт назначения, вы сделаете git push origin <branch>
и отправитесь за кофе
Из этого классного учебника Attlassian :
Команда git fetch
загружает коммиты, файлы и ссылки из
удаленный репозиторий в вашем локальном репо.
Извлечение - это то, что вы делаете, когда хотите увидеть, что есть у всех еще
работал над. Это похоже на обновление SVN в том, что он позволяет вам видеть
как развивалась центральная история, но это не заставляет вас
на самом деле объединить изменения в вашем хранилище. Git изоляты
загружен контент из существующего локального контента , он имеет абсолютно
не влияет на вашу местную работу по развитию . Извлеченное содержимое должно быть явно извлечено с помощью команды git checkout
. Это делает
выбор безопасного способа просмотра коммитов перед их интеграцией с
ваш локальный репозиторий.
При загрузке контента из удаленного репозитория доступны команды git pull
и git fetch
для выполнения задачи. Вы можете рассмотреть
git fetch
«безопасная» версия двух команд. Это будет скачать
удаленный контент, но не обновлять рабочее состояние вашего локального репо,
оставляя вашу текущую работу нетронутой. git pull
более агрессивный
Альтернативно, он будет загружать удаленный контент для активного локального
ветвь и немедленно выполните git merge
, чтобы создать коммит слияния
для нового удаленного контента. Если у вас есть ожидающие изменения в процессе
это вызовет конфликты и положит начало разрешению конфликтов слиянием
поток.
С git pull
:
- Вы не получаете никакой изоляции.
- Влияет на ваше местное развитие.
- Его не нужно явно проверять. Потому что это неявно делает
git merge
.
- Это в основном НЕ безопасно. Это агрессивно.
- В отличие от
git fetch
, где он влияет только на .git/refs/remotes
, git pull будет влиять как на .git/refs/remotes
, так и .git/refs/heads/
Хммм ... так что если я не обновляю рабочую копию с git fetch
, то где я делаю изменения? Где git fetch хранит новые коммиты?
Отличный вопрос. Он помещает его куда-то изолированно от вашей рабочей копии. Но опять же где? Давайте узнаем.
В каталоге вашего проекта (т. Е. Где вы выполняете команды git
) выполните:
ls
. Это покажет файлы и каталоги. Ничего крутого, я знаю.
Теперь сделайте ls -a
. Это покажет точечные файлы , то есть файлы, начинающиеся с .
После этого вы сможете увидеть каталог с именем: .git
.
- Do
cd .git
. Это, очевидно, изменит ваш каталог.
- Теперь самое интересное; сделать
ls
. Вы увидите список каталогов. Мы ищем refs
. Do cd refs
.
- Интересно посмотреть, что находится внутри всех каталогов, но давайте сосредоточимся на двух из них.
heads
и remotes
. Используйте cd
, чтобы проверить внутри них тоже.
- ЛЮБОЙ
git fetch
, который вы делаете, будет обновлять элементы в каталоге /.git/refs/remotes
. Он ничего не обновит в каталоге /.git/refs/heads
.
- ЛЮБОЙ
git pull
сначала выполнит git fetch
, обновит элементы в каталоге /.git/refs/remotes
, затем объединится с вашим локальным сервером и затем изменит заголовок внутри каталога /.git/refs/heads
.
Также можно найти очень хороший связанный ответ Где размещается "git fetch"?
Также обратите внимание на «Слеш нотацию» из Соглашения об именах веток Git post. Это поможет вам лучше понять, как git помещает вещи в разные каталоги