자식은 모든 변경 사항을 버리고 업스트림에서 가져옵니다.


145

업스트림 저장소를 가져 와서 마스터를 대체하려면 어떻게해야합니까? 나는 내 repo에 마스터 인 하나의 브랜치를 가지고 있으며 완전히 엉망이되어 기본적으로 업스트림에서 다시 시작해야합니다. 나는 init이 일을 할 것이라고 생각하지만 더 쉬운 방법이 있습니까?

답변:


251

여기서 할 수있는 최소한 두 가지가 있습니다. 원격 리포지토리를 복제하거나 reset --hard공통 조상으로 가져간 다음 풀을 수행하면 원격 마스터의 최신 커밋으로 빨리 넘어갈 수 있습니다 .

구체적으로 말하면 Nevik Rehnel의 원래 답변을 간단히 확장 한 것입니다.

git reset --hard origin/master
git pull origin master

참고 : using git reset --hard은 커밋되지 않은 변경 사항을 버리고 git을 처음 사용하는 경우이 명령과 혼동하기 쉬울 수 있으므로 진행하기 전에 수행 할 작업을 이해해야합니다.


1
신인들을위한 더 많은 도움 : git gc청소 및 청소를 통해 실행. 다른 참고로, 나는 결코 실행하지 않았다 git gc. 달리기는 좋지만 필요하지는 않습니다.
Joshua Dance

@JoshuaDance-좋은 지적. 내가 왜 원래 포함했는지 잘 모르겠습니다.
에릭 워커

23

지점 마스터에있는 동안 : git reset --hard origin/master

그런 다음 일부 정리 git gc 하십시오 (맨 페이지에서 이에 대한 자세한 내용)

업데이트 : 당신은 또한 아마를 수행해야합니다 git fetch origin(또는 git fetch origin master당신이 경우 에만 해당 분기를 원하는); 재설정 전이나 후에이 작업을 수행해도 문제가되지 않습니다. (감사합니다 @ eric-walker)


1
을 누른 다음 당기기를 수행해야 할 수도 있습니다 reset --hard.
Eric Walker

리셋하기 전에 git fetch origin이 실행되면 마스터에서 가져 오지 않아도됩니다.
sciritai

@ sciritai : 내 의견은 출처에서 가져 오기에 대한 언급 전에 추가되었습니다.
Eric Walker

19

단일 명령으로 수행 할 수 있습니다.

git fetch --all && git reset --hard origin/master

또는 한 쌍의 명령으로 :

git fetch --all
git reset --hard origin/master

보다 주 당신이 모든 로컬 변경을 잃게됩니다


5
git reset <hash>  # you need to know the last good hash, so you can remove all your local commits

git fetch upstream
git checkout master
git merge upstream/master
git push origin master -f

짜잔, 이제 포크가 업스트림과 동일합니다.


0

나는 마침내 대신에 git fetch --all && git reset --hard origin/master이어야 한다는 것을 깨달았습니다 git fetch --all && git reset --hard origin/<branch_name>(다른 지점에서 작동하는 경우).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.