수색…


비고

Git의 reflog는 변경 될 때마다 HEAD의 위치 (저장소의 현재 상태에 대한 참조)를 기록합니다. 일반적으로 파괴적 일 수있는 모든 작업에는 HEAD 포인터 이동이 포함됩니다 (과거를 포함하여 변경된 사항이 있으면 팁 커밋의 해시가 변경되므로 위험한 작업이 수행되기 전에 항상 이전 상태로 되돌릴 수 있음). reflog에서 올바른 행을 찾아서

그러나 어떤 ref에 의해 참조되지 않은 객체는 ~ 30 일 내에 가비지 수집되므로 reflog가 항상 도움이되는 것은 아닙니다.

나쁜 rebase에서 복구

대화식 리베이스를 시작했다고 가정 해보십시오.

git rebase --interactive HEAD~20

실수로 잃어 버리고 싶지 않은 커밋을 버리거나 떨어 뜨린 다음 rebase를 완료했습니다. 복구하려면 git reflog 하면 다음과 같은 출력이 표시 될 수 있습니다.

aaaaaaa HEAD@{0} rebase -i (finish): returning to refs/head/master
bbbbbbb HEAD@{1} rebase -i (squash): Fix parse error
...
ccccccc HEAD@{n} rebase -i (start): checkout HEAD~20
ddddddd HEAD@{n+1} ...
...

이 경우 최종 커밋 인 ddddddd (또는 HEAD@{n+1} )는 사전 rebase 브랜치의 팁입니다. 따라서 커밋 (그리고 실수로 부숴 지거나 버려진 커밋을 포함하여 모든 커밋)을 복구하려면 다음을 수행하십시오.

$ git checkout HEAD@{n+1}

그런 다음 git checkout -b [branch] 를 사용하여 커밋 할 때 새 분기를 만들 수 있습니다. 자세한 내용은 분기 를 참조하십시오.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow