복잡한 병합을 수행하기 전에 로컬 변경 사항을 숨기고 병합을 수행 한 다음 실행하기 전에 커밋하는 것을 어리석게 잊었습니다 git stash pop
. 팝은 추적하기 어려운 몇 가지 문제 (큰 코드베이스에서 잘못된 메소드 호출)를 생성했습니다. 나는을 실행 git stash show
했으므로 적어도 어떤 파일이 변경되었는지 알고 있습니다. 다른 것이 없다면, 이것이 더 커밋하는 교훈이라고 생각합니다.
내 질문 : 병합을 취소하지 않고 숨김 팝을 취소 할 수 있습니까?
답변
Git에서 떨어진 스테이크를 복구하는 방법을 사용해보십시오 . 튀어 나온 은신처를 찾으십시오. 인덱스와 작업 복사본을 유지하기 때문에 숨김에 대해 항상 두 개의 커밋이 있다고 생각합니다 (따라서 인덱스 커밋은 비어있을 것입니다). 그런 다음 git show
diff를보고 patch -R
적용을 취소하는 데 사용 합니다.
답변
에서 git stash --help
Recovering stashes that were cleared/dropped erroneously
If you mistakenly drop or clear stashes, they cannot be recovered through the normal safety mechanisms. However, you can try the
following incantation to get a list of stashes that are still in your repository, but not reachable any more:
git fsck --unreachable |
grep commit | cut -d\ -f3 |
xargs git log --merges --no-walk --grep=WIP
이것은 동일한 시나리오에서 허용되는 답변보다 나에게 도움이되었습니다.
답변
병합이 너무 복잡하지 않은 경우 다른 옵션은 다음과 같습니다.
- “git stash”를 사용하여 병합 변경 사항을 포함하여 모든 변경 사항을 숨김으로 다시 이동하십시오.
- 병합을 다시 실행하고 삭제 된 숨김의 변경 사항없이 변경 사항을 커미트하십시오.
- 파일이 지금 동일하므로 이전 병합의 모든 변경 사항을 무시해야하는 “git stash pop”을 실행하십시오.
그 후에 당신은 당신이 너무 일찍 떨어 뜨린 은신처의 변경 사항 만 남게됩니다.