충돌로 git merge를 취소하는 방법


785

나는 지점에 mybranch1있습니다. mybranch2에서 분기되었으며에서 mybranch1변경되었습니다 mybranch2.

그런 다음에있는 동안 mybranch1, 나는했던 git merge --no-commit mybranch2 그것은 병합 중에 충돌이 있었다 보여줍니다.

이제 모든 것을 ( merge명령) 버려서 mybranch1이전 상태로 되돌리고 싶습니다 . 어떻게해야할지 모르겠습니다.


답변:


1355

최신 힘내 :

git merge --abort

이렇게하면 작업 복사본을 병합하기 전의 상태로 재설정합니다. 즉, 병합 전에 항상 커밋되지 않은 변경 사항을 복원해야하지만 항상 안정적으로 수행 할 수는 없습니다. 일반적으로 커밋되지 않은 변경 사항과 병합하지 않아야합니다.

버전 1.7.4 이전 :

git reset --merge

이것은 오래된 구문이지만 위와 동일합니다.

버전 1.6.2 이전 :

git reset --hard

커밋되지 않은 병합을 포함하여 커밋되지 않은 모든 변경 사항을 제거합니다. 때때로이 동작은 위 명령을 지원하는 최신 버전의 Git에서도 유용합니다.


1
그러나 이전 버전의 git에서는 이것이 사용하는 방법입니다
Anshul

7
때로는 git reset --merge최신 버전에서도 사용해야 할 때가 있습니다 . 자식 2.2.1 git merge --abort에서 git reset --merge성공하고 올바른 일을하는 곳에서 오류 가 발생했습니다 (변경하지 않음) .
시어 도어 머독

자동 병합 충돌로 인해 숨김이 표시 될 때 git merge --abort따라야 할 필요가 있음을 발견했습니다 git reset --merge.
Chef Pharaoh

1
일반적으로 git merge --abort나를 위해 일하지만 분리 된 HEAD 상태에서 체크 아웃하고 내 파일 중 하나가 "모두 수정 됨"상태 인 상황에서 나 자신을 발견했습니다. 내가 버린 모든 것을 원하고 지점으로 돌아가, 나는에 있었다 git reset --hard, git merge --abort(MERGE_HEAD 누락), 중단에는 병합이 없었다 내게 말했다.
yano

간혹 git merge --abort이전 상태로 되돌릴 수없는 경우에는 "이전 구문" git reset --hard이 트릭을 수행합니다.
케빈 스튜어트

130

실제로, 그것이 주어진 주어진 git merge --abort것과 동등한 것에 주목할 가치 가 있습니다. 이것은 git help for merge 명령에서 읽을 수 있습니다.git reset --mergeMERGE_HEAD

git merge --abort # is equivalent to git reset --merge when MERGE_HEAD is present.

더있을 때 실패한 병합 한 후 MERGE_HEAD, 실패한 병합으로 취소 할 수 없다 git reset --merge반드시으로하지만 git merge --abort, 그들은 같은 일에 대한 이전 및 새 구문뿐만 아니라 그래서 .

개인적으로 나는 git reset --merge일상 업무에서 훨씬 더 유용하다고 생각 합니다.


2
감사합니다.이 정보는 매우 도움이되었습니다. 나는 시작하는 병합 한 git stash apply잘못된 지점에, 그리고 git merge --abort아무것도 (NO 않았다 MERGE_HEAD동안) git reset --merge트릭을했다.
geomaster

4
나는 약 10 명이 git merge --abort새로운 명령 이라고 말하는 것을 보았고 git reset --merge@geomaster와 같은 문제에 부딪 쳤습니다. 이것은 매우 도움이되었습니다!
Tom

106

최신 자식을 사용한다고 가정하면,

git merge --abort

Ok 이것은 1.7.0.7에서 작동하지 않습니다 :(. reset --hard를 사용해야 함
Anshul

5

먼저 명령으로 병합을 실행 취소 할 수있는 두 가지가 있습니다.

git merge --abort

또는

명령으로 이전 커밋 상태로 일시적으로 이동할 수 있습니다.

git checkout 0d1d7fc32 

0

소스 트리

병합을 커밋하지 않으면 다른 브랜치를 두 번 클릭하고 (= 체크 아웃) 소스 트리에서 모든 변경 사항을 취소하는 것에 대해 물으면 동의합니다.

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