programing

우발적인 Git Stash Pop 실행 취소

batch 2023. 7. 10. 22:11
반응형

우발적인 Git Stash Pop 실행 취소

복잡한 병합을 수행하기 전에 로컬 변경 사항을 저장하고 병합을 수행한 다음 실행하기 전에 커밋하는 것을 어리석게 잊어버렸습니다.git stash pop이 팝업은 추적하기 어려운 몇 가지 문제(큰 코드베이스의 잘못된 메서드 호출)를 발생시켰습니다.도망친git stash show그래서 최소한 어떤 파일이 변경되었는지는 알고 있습니다.다른 것이 없다면, 저는 이것이 더 많은 일을 해야 할 교훈이라고 생각합니다.

제 질문: 병합을 취소하지 않고 스택 팝을 취소할 수 있습니까?

Git에서 손실된 저장소를 복구하는 방법을 사용하여 저장한 저장소를 찾아 보십시오.인덱스와 작업 복사본을 보존하기 때문에(인덱스 커밋이 종종 비어 있음), 저는 스택에 대해 항상 두 개의 커밋이 있다고 생각합니다.그리고나서git show그들은 차이점과 사용법을 봅니다.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

이것은 같은 시나리오로 받아들여진 답변보다 더 도움이 되었습니다.

병합이 너무 복잡하지 않은 경우 다른 옵션은 다음과 같습니다.

  1. "gitstash"를 사용하여 병합 변경 사항을 포함한 모든 변경 사항을 다시 stash로 이동
  2. 병합을 다시 실행하고 변경 내용을 커밋합니다(삭제된 스택의 변경 내용 제외).
  3. 이제 파일이 동일하므로 이전 병합의 모든 변경 사항을 무시하는 "gitstash pop"을 실행합니다.

그 후에는 너무 일찍 삭제한 저장소의 변경 사항만 남게 됩니다.

언급URL : https://stackoverflow.com/questions/6543519/undoing-accidental-git-stash-pop

반응형