Я хочу синхронизировать свой локальный репозиторий с удаленным, чтобы мой локальный репозиторий стал на 100% копией удаленного - это означает, что если определенные файлы отличаются в этих репозиториях, мы перезаписываем локальные с удаленными, и если есть файлы в локальных репозиториях, которые не существуют на удаленном компьютере, локальные файлы удаляются.
Есть ли способ достичь этого, кроме как сделать свежий клон удаленного хранилища?
Подобный вопрос, как Синхронизация локального репозитория Git с удаленным в один выстрел, отменяя локальные изменения / коммиты .
git fetch --prune
Ответы:
источник
git pull -p
делает то же самое - «git pull запускает git fetch с заданными параметрами и вызывает git merge для слияния найденных головок веток с текущей ветвью» - git-scm.com/docs/git-pullgit fetch <remote> --prune
, если кому-то нужен только--prune
конкретный пульт. например.git fetch upstream --prune
,git fetch origin --prune
синхронизировать локальное репо с вашим форкомupstream
проектаЭти шаги сделают это:
тогда без
-n
Это позаботится обо всех локальных изменениях. Теперь коммиты ...
и обратите внимание на строку, такую как:
Запишите номер «N» сейчас:
и наконец:
не должно показывать ничего, чтобы добавить / зафиксировать. Все чисто.
Тем не менее, свежий клон может сделать то же самое (но очень медленно).
=== Обновлено ===
Поскольку мои знания в git со временем немного улучшились, я нашел еще один более простой способ сделать то же самое. Вот как (# с объяснением). Пока в вашей рабочей ветке:
Хотя после этого ваши локальные коммиты и изменения исчезнут из поля зрения, при необходимости можно восстановить зафиксированные изменения.
источник
Вы должны понимать, что репозиторий Git - это не просто дерево каталогов и файлов, но также хранит историю этих деревьев, которая может содержать ветви и слияния.
При извлечении из репозитория вы скопируете все или некоторые из его ветвей в свой репозиторий. Затем они находятся в вашем репозитории как «ветви удаленного отслеживания», например, ветви с такими же именами
remotes/origin/master
.Выборка новых коммитов из удаленного репозитория ничего не изменит в вашей локальной рабочей копии.
Ваша рабочая копия обычно получает извлеченный коммит
HEAD
. Этот коммит обычно является наконечником одного из ваших местных филиалов.Я думаю, что вы хотите обновить свою локальную ветвь (или, может быть, все локальные ветки?) До соответствующей удаленной ветки, а затем проверить последнюю ветку.
Чтобы избежать любых конфликтов с вашей рабочей копией (которые могут иметь локальные изменения), сначала очистите все, что не является версионным (используя
git clean
). Затем вы проверяете локальную ветвь, соответствующую удаленной ветке, которую хотите обновить, и используетеgit reset
для переключения на извлеченную удаленную ветку. (git pull
будет включать все обновления удаленной ветки в вашей локальной, которые могут делать то же самое, или создавать коммит слияния, если у вас есть локальные коммиты.)(Но тогда вы действительно потеряете все локальные изменения - как в рабочей копии, так и в локальных коммитах. Убедитесь, что вы действительно этого хотите - в противном случае лучше использовать новую ветку, это сохранит ваши локальные коммиты. И используйте
git stash
для сохранения изменений, которые еще не зафиксированы. .)Изменить: Если у вас есть только одна локальная ветвь и вы отслеживаете одну удаленную ветку, все, что вам нужно сделать, это
из рабочего каталога.
Это извлечет текущую версию всех отслеживаемых удаленных веток и обновит текущую ветку (и рабочий каталог) до текущей версии удаленной ветви, которую она отслеживает.
источник
git pull
Я думаю, в вашем простом случае этого должно быть достаточно. (Я обновил ответ.)Вы хотите сделать
Это делает ваше локальное репо точно таким же, как ваше удаленное репо.
Не забудьте заменить origin и master на удаленный и ветвь, с которой вы хотите синхронизироваться.
источник
node_modules
, это работает именно так, как я хочу.Сбросить и синхронизировать локальный репозиторий с удаленной веткой
Команда: Не забудьте заменить origin и master на удаленный и ветвь, с которой вы хотите синхронизироваться.
Или пошагово:
Ваш локальный филиал теперь является точной копией (коммиты и все) удаленного филиала.
Вывод команды:
Вот пример запуска команды на локальном клоне репозитория Forge a git.
источник
(Эта информация взята из Руководства пользователя Git )
Я тоже учусь, так что это может быть не совсем ответ на вопрос, но это может кому-то помочь:
git branch -r
)git fetch
. Это не повлияет на существующие ветки, созданные вами.git add origin /path/to/repository
)git checkout origin/branch_name
, это отменит ваши локальные изменения в веткеbranch_name
источник
Похоже, вы хотите зеркало удаленного хранилища:
Эта команда создает пустой репозиторий. Если вам не нужен пустой репозиторий, все становится сложнее.
источник
Если вы говорите о синхронизации разветвленного репо, вы можете выполнить следующие действия.
Как синхронизировать репозиторий форка из git
проверь свою текущую ветку git
git branch
Оформить заказ мастеру, если вы не мастер
git checkout master
Извлеките вышестоящий репозиторий, если у вас есть правильные права доступа
git fetch upstream
Если вы получаете ниже ошибки, то запустите
git remote add upstream git@github.com:upstream_clone_repo_url/xyz.git
Теперь выполните команду ниже.
git fetch upstream
Теперь, если вы находитесь на master, тогда объедините upstream / master в master ветку
git merge upstream/master
Это оно!!
Перекрестная проверка через
git remote
команду, более конкретноgit remote -v
Если у меня также есть права коммитов на репозиторий upstream, я могу создать локальную ветвь upstream и выполнить работу, которая пойдет туда upstream.
источник
Вы можете использовать git hooks для этого. Просто создайте хук, который толкает измененный на другой репо после обновления.
Конечно, вы можете столкнуться с конфликтами слияния, поэтому вы должны понять, как с ними справляться.
источник