git reset --hard HEAD ^ 후 추가 된 파일 복구
새 파일 F1을 추가하고 다른 파일 F2를 변경했지만 "git reset --hard HEAD ^"를 수행하고 파일에 대한 모든 변경 사항을 잃었습니다.
거기에 일부 방법은, 내가 그들을 다시 얻을 수 있습니다.
여기에서 관련 질문을 보았습니다. git reset --hard HEAD ~ 1을 실행 취소하려면 어떻게해야합니까? 그러나 그 질문은 그 사람이 git 커밋을 수행했다고 가정합니다.
(일부 작업을 통해) 마지막 "git add <file> " 에서 파일 상태를 복구 할 수 있습니다 . 당신이 사용할 수있는
$ git fsck --cache --no-reflogs --lost-found --unreachable HEAD
그런 다음 '.git / lost-found / other'디렉토리의 파일을 검사하십시오.
git fsck 맨 페이지를 읽으십시오 .
(누락 된 파일이 커밋의 일부 가 아니라고 가정합니다 . 그렇지 않으면 git log --all -g --diff-filter=D --stat
친구입니다.)
git
파일 이름 을 알고있는 도달 할 수없는 파일 목록 가져 오기 :git fsck --unreachable --no-reflogs --no-cache HEAD | fgrep " tree " \ | cut -d " " -f3 | xargs -r -n1 git ls-tree \ | fgrep " blob " | cut -d " " -f 3- | sort -k2 -u
흥미로운 것을 발견
git cat-file blob SHA-1-of-interesting-file
하면 파일을 표준 출력으로 출력합니다. (실시 예 :git cat-file blob b8f0bdf56 > recovered-logo.png
)
불행히도 누락 된 파일이 어떤 커밋의 일부가 아닌 경우 git에는 타임 스탬프가 없으므로 시간순으로 정렬 된 다양한 버전의 파일을 인쇄 할 수 없습니다.
누락 된 파일이 스테이징 ( git stage
또는 git add
) 또는 숨김 ( git stash
)되지 않은 경우 git이 아는 한 파일이 존재하지 않았기 때문에 운이 좋지 않습니다. (당신은 여전히 git가 실수로 잃어버린 파일의 복사본을 가지고있는 경우에 대비하여 보관할 가치가있는 것이 있는지 확인하기 위해 a를 수행하고 git fsck --no-reflogs --lost-found
디렉토리 .git/lost-found/other
를 둘러 볼 수 있습니다.이 경우에 도움이 될 파일 이름이 없습니다. 파일 내용.)
파일 대신에 일부 커밋을 잃어버린 경우 다음과 같이 실행하고 싶을 것입니다.
gitk --all $( git fsck | awk '/dangling commit/ {print $3}'; git log -g --pretty='format:%H' )
그것은 gitk
모든 분기, 모든 리플 로그 및 모든 매달린 커밋과 함께 실행 됩니다. -n 10000
리포지토리에 커밋이 정말 많은 경우 (예 : Linux 커널) 를 추가 하거나 다른 제한 을 추가 할 수 있습니다 . 이없는 경우 다음 gitk
과 같은 명령 줄 만 사용하여 더 낮은 버전을 대신 실행할 수 있습니다.
git log --all --decorate --stat --graph --date-order $( git fsck | awk '/dangling commit/ {print $3}'; git log -g --pretty='format:%H' )
또는 덜 자세한 출력이있는 버전
git log --all --decorate --oneline --graph --date-order $( git fsck | awk '/dangling commit/ {print $3}'; git log -g --pretty='format:%H' )
브랜치로 저장하고 싶은 커밋이 보이면 recovered1
그냥하세요 git checkout -b recovered1 <sha1-of-the-commit>
.
http://gitready.com/advanced/2009/01/17/restoring-lost-commits.html을 보십시오
잃어버린 변화 때문에 심장 마비가 생겼습니다. 그러나이 게시물을 따른 후. 변경 사항을 되찾았습니다.
이 작업을 git plugin
즉시 수행하는 것이 있습니다.
https://github.com/pendashteh/git-recover-index
$ cd /path/to/disatered/repo
$ git clone git@github.com:pendashteh/git-recover-index.git $HOME/.git-recover-index
$ $HOME/.git-recover-index/git-recover-index.sh
실제로 git add를 사용하여 인덱스에 개체를 추가 한 경우 개체의 해당 상태에 대해 생성 된 Blob이 있지만이를 참조하는 트리 (따라서 커밋) 개체가 없습니다. 이것이 '매달린'느슨한 객체 파일을 얻는 방법이며, git fsck를 실행하면 참조되지 않은 blob이 표시됩니다 (git gc가 실행되면 이러한 유형의 객체를 삭제합니다).
이 때문에 reflog를 활성화 한 경우 추가 된 파일 F1의 인덱스 상태를 복원하고 복원 할 수 있습니다. F2를 전혀 추가하지 않았다면 Greg가 말했듯이 git은 그것에 대해 아무것도 모르고 운이 좋지 않습니다.
참고 URL : https://stackoverflow.com/questions/1108853/recovering-added-file-after-doing-git-reset-hard-head
'IT박스' 카테고리의 다른 글
정적 생성자 란 무엇입니까? (0) | 2020.12.08 |
---|---|
정규 표현식에 ":"( "콜론")을 입력하는 방법은 무엇입니까? (0) | 2020.12.08 |
테이블에 행이 있는지 여부 확인 SQL Server 2005 (0) | 2020.12.07 |
Javascript로 CKEditor에서 값을 어떻게 설정합니까? (0) | 2020.12.07 |
Python MySQLdb 문제 (TypeError : % d 형식 : str이 아닌 숫자가 필요함) (0) | 2020.12.07 |