Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 리눅스
- 자바
- 파이썬
- Java
- 튜토리얼
- codewars
- programmers
- zookeeper
- Python
- dynamic programming
- gradle
- 동적프로그래밍
- 코드워
- scala
- OOM
- redis
- docker
- go
- golang
- Linux
- 프로그래머스
- 스칼라
- 문제풀이
- 주키퍼
- DP
- boj
- HBase
- Go언어
- 알고리즘
- leetcode
Archives
- Today
- Total
파이문
git rm 한 file 복구(reset, restore) 하기 본문
728x90
상황
- git rm /path/to/file
- git commit -m "Delete wrong file" .
- git push
git rm (--cached 없이) 으로 파일을 삭제하고 커밋하고 push 까지 해 버림 (...)
(원래는 git mv 로 파일을 변경했는데 source 파일을 삭제 안하고 target 파일을 삭제했다는 TMI)
목표
이 때 잘못 삭제한 파일을 복구하고 싶었다.
Example
git version < 2.23
# 복구할 version 확인하기
$ git log
# version 으로 이동
$ git reset <version>
# 삭제한 파일을 다시 가져온다
$ git checkout -- /path/to/file
# 다시 커밋함
$ git commit -m "Fix" /path/to/file
# force push 한다
$ git push -f
특이사항으로는 이전에 삭제 후 커밋, 푸시 한 버젼이 사라지고 현재 새롭게 (복구한 파일이 있는) 만든 커밋으로 force push 한다는 점이다.
잘못 삭제해서 푸시까지 한 이후 커밋이 없기 때문에 force push 해도 상관 없었다.
git version >= 2.23
# git restore 로 특정 파일을 가져온다.
# 아래의 의미는 main~1 (main/HEAD 에서 이전 1번째) 커밋에서 /path/to/file 를 다시 가져온다는 것임
# restore 옵션은 여기서 확인 https://git-scm.com/docs/git-restore
$ git restore --source main~1 /path/to/file
# 다시 추가한 거기 때문에 stage 에 다시 추가 해 줌
$ git add /path/to/file
# 다시 커밋해준다.
$ git commit -m "Fix" /path/to/file
# push
$ git push
1번째 방법이랑 다른 점은 git 에서 새롭게 나온 restore 를 사용했다는 점이고, commit 을 되돌린게 아니기 때문에 force push 하지 않아도 된다.
롤백 개념이라기 보다는, 파일을 다시 추가해서 새로운 커밋을 만들어줬다는 점 정도? (물론 reset 하고 force push 해도 되는데, restore 도 써보고 싶었음)
'TIL' 카테고리의 다른 글
gradle-ssh-plugin 사용하기 (0) | 2021.02.18 |
---|---|
gradle proxy 설정 (0) | 2021.02.17 |
curl 요청 및 응답 시간 자세히 보기 (0) | 2020.12.10 |
TimedSemaphore 를 사용하던 멀티 쓰레드가 종료 안되던 문제 (0) | 2020.12.08 |
Producer-Consumer 종료하기 (0) | 2020.12.03 |
Comments