로컬 파일을 덮어 쓰지 않고 원격에서 파일을 가져 오려면 어떻게해야합니까?


113

기존 원격 저장소에 새 git 저장소를 설정하려고합니다.

내 로컬 파일이 원격 저장소를 덮어 쓰길 원하지만 git은 먼저 해당 원격 파일을 가져 와서 병합해야한다고 말합니다.

가져올 방법이 있지만 원격 파일이 로컬 파일을 덮어 쓰지 않는지 확인하십시오.

답변:


182

음, 예, 아니오 ...

로컬 복사본이 원격에있는 내용을 "무시"하기를 원한다는 것을 이해합니다.하지만 누군가가 원격 저장소의 파일을 다른 방식으로 수정 한 경우 해당 변경 사항을 무시 하고 "강제"하려고합니다. 가능한 갈등을 보지 않고 자신의 변경 사항 , 글쎄, 나는 당신 (그리고 당신의 동료)을 위해 울습니다 ;-)

하지만 "올바른 일 ..."을하는 것은 정말 쉽습니다.

1 단계:

git stash

로컬 저장소에서. 그러면 로컬 업데이트가 숨김에 저장되고 수정 된 파일이 편집 전 상태로 되돌아갑니다.

2 단계:

git pull

수정 된 버전을 얻으려면. 이제 걱정되는 파일의 새 버전이 나오지 않기를 바랍니다. 그렇지 않은 경우 다음 단계가 원활하게 작동합니다. 이 경우 않습니다 , 당신은 할 몇 가지 작업을 가지고, 당신은 당신이 한 드리겠습니다.

3 단계 :

git stash pop

1 단계에서 저장 한 수정 된 버전을 2 단계에서 방금 가져온 버전과 병합합니다. 모든 것이 순조롭게 진행되면 모든 설정이 완료된 것입니다!

반면에 2 단계에서 가져온 내용과 수정 사항 사이 에 실제 충돌이있는 경우 (다른 사람이 중간에 편집하여)이를 찾아 해결하라는 메시지가 표시됩니다. 해.

이런 식으로 상황이 훨씬 더 잘 진행될 것입니다. 심각하고 심각한 문제에 대해 경고하면서 실제 작업없이 변경 사항을 유지할 수 있습니다.


5
git commit지역적 변화가 일어나지 git pull않습니까?
Don Cheadle 2014 년

10
때로는 코드를 커밋하고 싶지 않은 위치에 있지만 로컬 컴퓨터에 보관하고 싶습니다. 이러한 명령 집합은이 작업에 정말 도움이됩니다.
Vargan

3
여러 파일이있는 경우, 일부는 덮어 쓰고, 일부는 덮어 쓰지 않을 경우 유용하지 않습니다. GIT에게 풀에서 파일을 무시하도록 지시하는 방법이 없습니까? 왜, 나는 ... 전혀 그 디자인 결정 밀어 .gitignore에만 작업을 이해하지 않습니다
Bobak 셰미

25

먼저 로컬 변경 사항을 숨긴 다음 끌어온 다음 숨길 수 있습니다.

git stash
git pull origin master
git stash pop

원격에서 변경 사항을 무시하는 것은 수동으로 해결해야하는 충돌이 있습니다.


4
나는 이미 "저장 할 로컬 변경 사항이"없다 말한다 로컬 그래서 이러한 변화를 저지른
조 Isaacson에게

이것이 최선의 전략이라고 생각합니다.
Jimmy Obonyo Abor

13

따라서 로컬 저장소에 로컬 변경 사항을 커밋했습니다. 그런 다음 로컬 파일을 변경하지 않고 로컬 저장소를 원격으로 변경하려면 git fetch. 실제로 git pull두 단계의 작업이다 비파괴 git fetcha로 하였다는 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 

이제 다른 분기에 원격 변경 사항이 있으며 로컬 파일은 그대로 유지합니다.

그럼 다음은? 를 수행 할 수 있습니다 git merge. 이는 git pull이전과 결합했을 때와 동일한 효과를 나타내 git fetch거나, 내가 선호하는 git rebase origin/master대로 변경 사항을 위에 적용하여 origin/master더 깨끗한 기록을 제공합니다.


페치 GIT 두 단계로 자식 손잡이를 설명 감사 / 자식 병합
cdabel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.