Git : 분기 된 로컬 브랜치의 모든 변경 사항 취소


117

원격 분기를 추적하는 로컬 토픽 분기가 있습니다. 논쟁을 위해 커밋 히스토리가 다음과 같다고 가정하십시오.

A--B--C--O1--O2--O3 (origin/phobos)
       \
         L1--L2--L3 (phobos)

상대 커밋 히스토리를 살펴본 후, 이제 로컬 phobos브랜치 에 대한 모든 변경 사항을 버리고. 의 직접 사본으로 되돌려 origin/phobos로컬 히스토리가 다음과 같이 보이도록합니다.

A--B--C--O1--O2--O3 (phobos origin/phobos)

나는 phobos분기에 대한 로컬 변경을 정말로 원하지 않으며 나중에 원본 저장소에 병합이 표시되는 것을 정말로 원하지 않습니다. (그래서 병합은 제가 염두에 둔 것이 아닙니다.)

이것은 정말 쉬울 것 같지만 내 Google-fu가 나를 실패했습니다. 어떻게해야합니까?

답변:


79

분기를 삭제 한 다음 다시 만듭니다.

$ git branch -D phobos
$ git checkout --track -b phobos origin/phobos

37
이 접근 방식과 브랜치 헤드 재설정의 문제는 브랜치를 삭제하면 브랜치의 리플 로그가 날아간다는 것입니다. 반면에 브랜치를 재설정하면 reflog를 보존 할뿐만 아니라 실제로 재설정을 reflog에 기록합니다. 이렇게하면 나중에 필요한 경우 작업을 쉽게 되돌릴 수 있습니다.
Dan Molding

9
@Electrons_Ahoy 여기에서 받아 들여지는 답변을 Dan의 답변으로 변경하는 것이 좋습니다 (Google에서 Google을 검색 한 사람들이 더 안전한 방법을 선택할 수 있도록).
Steve Chambers

4
@DanMoulding의 대답은 불필요 할 때 로컬 브랜치를 삭제하는 것을 포함하지 않습니다. 훨씬 안전합니다.
brma 2014-06-12

@brma : 어떻게 그렇게? 여전히 분기가 새 커밋을 가리키고 있습니다.
mipadi 2014-06-12

5
Dan Moulding의 대답은 더 안전합니다. 나는 당신이 그것을 선택해야한다고 생각합니다.
Daniel Apt

330
git checkout phobos
git reset --hard origin/phobos

이는 Git에게의 헤드를와 phobos동일한 커밋으로 재설정하고 origin/phobos일치하도록 작업 트리를 업데이트하도록 지시합니다.


35
IMO 이것은 받아 들여진 대답이어야합니다; 제거 / 재생성 수술을 수행하는 대신 분기 포인터를 이식하기 위해 "재설정"명령을 실행합니다.
vdboor 2010 년

사실, 나는 이것을 먼저 시도했고 로컬 카피로 인해 거의 사용할 수 없게 만드는 많은 오류를 던졌습니다. 삭제 / 재 작성은 덜 우아 할 수 있지만 후속 질문을 할 필요가 없었습니다.
Electrons_Ahoy

3
@Electrons_Ahoy : 음, 확실히 정상이 아닙니다. 리포지토리가 정상적으로 작동하는 경우이 재설정은 일반적으로 문제가없는 작업입니다.
Dan Molding

또는 그것이 엉뚱한 경우에도. 이 명령을 실제로 읽지 않고 "실수로"실행 한 경우 git reflog를 사용하여 집으로가는 길을 찾으십시오. :)
dbn

또한 이것은 지점에 있고 로컬에서 엉망으로 만든 경우에도 작동합니다.
slott 2014 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.