Как вытащить файлы с удаленного компьютера без перезаписи локальных файлов?
Я пытаюсь создать новое репо git для ранее существовавшего удаленного репо.
Я хочу, чтобы мои локальные файлы перезаписывали удаленное репо, но git говорит, что мне сначала нужно извлечь эти удаленные файлы и объединить их.
Есть ли способ потянуть, но убедитесь, что локальные файлы не перезаписаны удаленным?
Ответы
Ответ 1
Ну, да, и нет...
Я понимаю, что вы хотите, чтобы ваши локальные копии "переопределяли" то, что на пульте дистанционного управления, но, о, человек, если кто-то изменил файлы в удаленном репо несколькими способами, и вы просто игнорируете их изменения и пытаетесь "заставляйте" свои собственные изменения, даже не глядя на возможные конфликты, ну, я плачу за вас (и ваших коллег); -)
Тем не менее, это действительно легко сделать "правильную вещь..."
Шаг 1:
git stash
в вашем местном репо. Это позволит сэкономить ваши локальные обновления в кошельке, а затем вернуть измененные файлы обратно в состояние предварительного редактирования.
Шаг 2:
git pull
чтобы получить любые измененные версии. Теперь, надеюсь, у вас не появятся новые версии файлов, о которых вы беспокоитесь. Если это не так, то следующий шаг будет работать гладко. Если да, то у вас есть работа, и вы будете рады, что сделали.
Шаг 3:
git stash pop
Это объединит ваши измененные версии, которые вы спрятали на шаге 1, с версиями, которые вы только что вытащили на шаге 2. Если все будет идти гладко, тогда вы все установите!
Если, с другой стороны, существовали реальные конфликты между тем, что вы сделали на шаге 2 и вашими изменениями (из-за того, что кто-то еще редактировал промежуточный период), вы узнаете и попросите их разрешить. Сделайте это.
Все будет работать намного лучше - это, вероятно, сохранит ваши изменения без какой-либо реальной работы с вашей стороны, предупредив вас о серьезных серьезных проблемах.
Ответ 2
Сначала вы можете сначала скрыть свои локальные изменения, затем потянуть, затем всплыть.
git stash
git pull origin master
git stash pop
Все, что переопределяет изменения с удаленного, будет иметь конфликты, которые вам придется разрешить вручную.
Ответ 3
Итак, вы сделали локальные изменения в своем локальном репозитории. Затем, чтобы получить удаленные изменения в локальном репозитории без внесения изменений в локальные файлы, вы можете использовать git fetch
. Фактически git pull
представляет собой двухэтапную операцию: неразрушающий git fetch
, за которым следует git merge
. См. В чем разница между 'git pull' и 'git fetch'? для дальнейшего обсуждения.
Подробный пример:
Предположим, что ваш репозиторий подобен этому (вы внесли изменения test2
:
* ed0bcb2 - (HEAD, master) test2
* 4942854 - (origin/master, origin/HEAD) first
И репозиторий origin
подобен этому (кто-то еще совершил test1
):
* 5437ca5 - (HEAD, master) test1
* 4942854 - first
В этот момент git будет жаловаться и попросить вас потянуть сначала, если вы попытаетесь нажать ваш test2
на удаленный репозиторий. Если вы хотите увидеть, что test1 не модифицирует ваш локальный репозиторий, запустите это:
$ git fetch
Локальный репозиторий результатов будет выглядеть следующим образом:
* ed0bcb2 - (HEAD, master) test2
| * 5437ca5 - (origin/master, origin/HEAD) test1
|/
* 4942854 - first
Теперь у вас есть удаленные изменения в другой ветке, и вы сохраняете свои локальные файлы неповрежденными.
Тогда что дальше? Обычно вы хотите объединить свои изменения с удаленными изменениями, а затем совершить и нажать. Но если вы не хотите использовать свои изменения исключительно (если это означает, что вы перезаписываете удаленное репо), вам нужно создать новую ветку (кроме master
) для вашего test2
и нажать эту ветвь на удаленный репозиторий.