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

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

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



답변

결과적으로 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}

답변

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

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

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

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


답변

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

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

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

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


답변

git checkout -f

이전 상태가 깨끗하면 작동해야합니다.


답변