병합 충돌을 일으키는 git stash pop 실행 취소


518

나는 오래된 토픽 브랜치에 있다는 것을 깨닫지 않고 코드베이스를 변경하기 시작했습니다. 그것들을 옮기기 위해 나는 그것을 숨기고 마스터의 새로운 지점에 적용하고 싶었습니다. 나는 git stash pop새로운 브랜치를 만들기 전에 새로운 변경 사항을 마스터로 가져 오지 않았다는 사실을 잊고 진행중인 작업 변경 사항을이 새로운 브랜치로 이전했습니다. 이로 인해 많은 충돌 충돌이 발생하고 변경 사항이 깨끗하게 사라지지 않습니다 (팝을 사용한 이후).

새 지점을 올바르게 다시 만들면 숨김 변경 사항을 복구하여 올바르게 적용하려면 어떻게해야합니까?

답변:


655

결과적으로 Git은 깨끗하게 적용되지 않으면 숨겨지지 않을 정도로 똑똑합니다. 다음 단계를 통해 원하는 상태에 도달 할 수있었습니다.

  1. 병합 충돌을 해제하려면 : git reset HEAD .(마지막 점 참고)
  2. 충돌이 발생한 병합을 저장하려면 (경우에 따라) : git stash
  3. 마스터로 돌아가려면 git checkout master
  4. 최신 변경 사항을 가져 오려면 : git fetch upstream; git merge upstream/master
  5. 새 지점을 수정하려면 git checkout new-branch; git rebase master
  6. 올바른 숨김 변경 사항을 적용하려면 (이제 스택의 두 번째) : git stash apply stash@{1}

14
감사합니다! # 6은 제가 찾던 답입니다. git stash drop# 2에서 원하지 않는 숨김을 제거하기 위해 마지막 단계로를 추가 할 수 있습니다 .
austinmarton

1
병합되지 않은 경로가있는 경우 # 2가 작동하지 않고 대신 여기에 설명 된 오류를 출력합니다. stackoverflow.com/questions/5483213/…
Étienne

5
완전히 사실이 아님 --Git은 깨끗하게 적용되지 않으면 숨김 목록에 숨김을 유지합니다. 에 대한이 문서를 참조하십시오 git stash pop". 충돌로 실패 할 수있는 상태를 적용,이 경우, 그것은 숨김 목록에서 제거되지 않습니다 당신은 손으로 충돌을 해결하고 호출 할 필요가 git stash drop나중에 수동으로." ( git-scm.com/docs/git-stash )
Carolyn Conway

4
이 답변과 질문이 정확히 같은 순간 에 어떻게 게시되는지 이상한
call-me

14
@ call-me 이것은 사람들이 실제로 더 자주해야한다고 생각하는 것입니다! "질문하기"양식에 동일한 양식으로 자신의 질문에 대답 할 수있는 확인란이있는 방법에 유의하십시오. :) 이 문제는 저를 혼란스럽게하는 질문을 작성하는 과정에서 때때로 발생하지만 StackOverflow에 적합하도록 질문을 조정하려고하면 솔루션을 알아냅니다. 이것은 얼마 전의 일이므로 여기에 해당되는지 기억이 나지 않지만 그 일이 일어났다 고 생각합니다.
acjay

340

운 좋게도 갈등이 발생하면 숨겨 git stash pop지지 않습니다 !

따라서 걱정할 것은 없습니다. 코드를 정리하고 다시 시도하십시오.

: 당신이 그 상태로 되돌아 갈 수있다, 당신의 코드베이스 전에 깨끗하다고 말 git checkout -f
그럼 당신은 잊었 물건, 예를 수행 git merge missing-branch
하는 단지 화재 후 git stash pop다시 당신은 얻을 같은 전에 갈등 숨겨 놓은.

주의 : 숨김은 안전하지만 작업 디렉토리의 커밋되지 않은 변경 은 안전 하지 않습니다. 그들은 엉망이 될 수 있습니다.


16
내가 이해하는 것은 단순히 정리하고 다시 팝업 할 수는 있지만 실행 취소 할 수는 없다는 것입니다. 팝이 커밋되지 않은 다른 변경 사항과 혼합되면 수동으로 정리해야합니다.
haridsv

이것은 매우 간단한 솔루션이며 저에게 효과적이었습니다. 그것은 대부분의 상황에서 효과가 있다고 생각되는 로컬로 변경된 모든 것을 되돌릴 수 있다고 가정합니다 (스태프가 튀어 나오기 전후의 변경 사항은 없었습니다). 이것이 문제임을 인식하기 전에 발생한 추가 변경 사항을 저장해야하는 경우, 대부분의 경우 체크 아웃을 수행하기 전에 해당 파일을 커미트 할 수 있어야합니다.
Project707

이것은 나에게 해당되지 않았습니다. 나는 git stash pop자동 병합, 충돌 및 유지를 시도했다.
Trevor Hickey

1
@TrevorHickey이 답변의 요점은 갈등이있을 때 그대로 숨겨져 있으며 갈등 git stash pop없이 끝날 때까지 필요할 때마다 전화를 걸 수 있다는 것 입니다. 따라서 충돌 후 작업 디렉토리가 엉망이지만 정리하고 git stash pop다시 호출 할 수 있습니다 .
flori

5
마지막 숨김 적용을 취소하는이 명령은 매우 유용합니다. git checkout -f!
Lefi Tarik 님이

16

여기 지침은 약간 복잡하므로 더 간단한 것을 제공 할 것입니다.

  1. git reset HEAD --hard 현재 브랜치에 대한 모든 변경 사항 포기

  2. ... 필요에 따라 중개 작업 수행

  3. git stash pop 준비가되면 나중에 다시 숨김을 다시 표시하십시오.



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