Подтвердить что ты не робот

Как вытащить файлы с удаленного компьютера без перезаписи локальных файлов?

Я пытаюсь создать новое репо git для ранее существовавшего удаленного репо.

Я хочу, чтобы мои локальные файлы перезаписывали удаленное репо, но git говорит, что мне сначала нужно извлечь эти удаленные файлы и объединить их.

Есть ли способ потянуть, но убедитесь, что локальные файлы не перезаписаны удаленным?

4b9b3361

Ответ 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 и нажать эту ветвь на удаленный репозиторий.