일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- pep8
- 프로그래머스
- 알고리즘
- GCP
- datascience
- 완전탐색
- NaverAItech
- docker
- FastAPI
- torchserve
- Kaggle
- Kubernetes
- FDS
- python
- GIT
- wandb
- leetcode
- vscode
- NLP
- 코딩테스트
- 백준
- autoencoder
- rnn
- GitHub Action
- Matplotlib
- github
- pytorch
- DeepLearning
- 네이버AItech
- PytorchLightning
- Today
- Total
Sangmun
git 파일 복구 본문
이런걸 알고 싶지 않았다 ㅅㅂ
커밋을 한 경우
커밋을 한 경우에는 git reflog 명령어들을 이용해서 이동하고 싶은 지점을 찾고 (보통은 직전 지점일 것으로 예상한다)
git reset --hard commit-id 명령어로 원하는 지점으로 돌아가주면 쉽게 해결이 된다.
커밋을 하지 않은 경우
이 경우가 문제인데.... 파일들이 git add로 staged된 상태에서 커밋만 하지 않고 git reset --hard 명령어를 이용해서 다른 지점으로 넘어간 경우이다. 즉 staged 되었던 파일들이 그대로 날아가게 된다.
다행히 복구할 방법이 있기는 했고... 나의 경우에는 해당 방법과 관련한 좀 더 유용한 옵션을 몰라서 좀 애를 먹었지만 어쨌든 살리는 데는 성공은 했다.
아무튼 우선 git fsck --lost-found 명령어를 입력하면 아래와 같이 파일(blob) 혹은 디렉토리(tree)의 해시값이 출력된다.
$ git fsck --lost-found
Checking object directories: 100% (256/256), done.
Checking objects: 100% (627/627), done.
dangling blob 0c6abc2d5faabc05babf319996ed80620797999f
dangling tree b5bff3dcdc0f8fa00c9bfa2be1f64f7af5feec3f
출력된 해시값을 바탕으로 파일 내용을 확인 할 수 있다.
$ git show 0c6a
#!perl
use 5.010;
use strict;
use warnings;
...
그렇다면 git show hash_value >> filename과 같이 명령어를 입력해서 파일의 내용을 복구는 할 수 있다.
그렇지만 해당 해시값이 어떠한 파일을 나타내는지는 알 수가 없는데, 해당 문제점을 해결할 방안으로 git cat-file이 있는 것 같다.
아래의 블로그의 글을 보면 git cat-file 명령어를 이용하여 0842 해시값으로 시작하는 디렉토리를 탐색한 것으로 보이는데 파일명도 출력이 되는 것을 확인할 수 있다.
$ git cat-file -p 0842
040000 tree 8b3468edc53b977fde3f5e2ae423009fa487c9e0 _Inline
100644 blob f22308643a862993af01681ef5a5e8fcfebe88fe sphere.pl
100644 blob ff9098d4b4b4a16ed54d418a3ec43b8c4f5cffbc test.c
100644 blob 04f766def6dcd4a1d297a84bc25cd9df385373bc test.o
git cat-file의 정확한 기능과 효용은 아직 사용해보지 않아서 잘 모르겠으나 웬만하면 쓸일이 없었으면 좋겠다..
http://gypark.pe.kr/wiki/Git/%EB%B3%B5%EA%B5%AC
'개발 > github' 카테고리의 다른 글
github action으로 google cloud에 CI/CD 환경 구축하기 (0) | 2023.02.12 |
---|---|
github action 기본사항 (0) | 2023.02.12 |
git simulation (0) | 2022.12.31 |
git reset, git revert (0) | 2022.12.28 |
vscode에서 git 사용하기 + 유용한 extention들 (0) | 2022.12.18 |