-
[Git] 커밋 기록 삭제 및 복구백엔드 2023. 3. 26. 00:02
CEOS 과제를 하던 중
데이터베이스 비밀번호가 적힌 파일을
gitingnore에 추가하지 않고 push 해버렸다.첫 번째 시도(커밋 기록 삭제)
아래 사진처럼 .env(my_setting.py로 설정)을 따로 둔 뒤, settings.py에 import해오는 식으로 구현했다.
데이터베이스 비밀번호나 비밀키 같은 경우 파일을 분리해서 저장해두면, gitignore로 쉽게 관리할 수 있기 때문!
my_setting.py를 gitignore에 추가해주고
이제 커밋기록에서 my_setting.py를 없애야 한다.
이전에 깃허브에 이미 push를 해놨기때문에 git에 기록이 되었다.
그래서 캐시를 먼저 삭제해주었다.
캐시 삭제
git rm -r --cached . 또는 git rm -r --cached 파일이름
변경된 내용 커밋
git add .
git commit -m "rm cache"
을 해준다. 이제 캐시를 지웠으니 Git(원격저장소)에서 History를 삭제해줘야한다.
History에서 삭제
## 기본툴 git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch 경로/경로/파일명.확장자' --prune-empty --tag-name-filter cat -- --all
## 내가 작성한 코드 git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch JW/mysite/mysite/my_setting.py --prune-empty --tag-name-filter cat -- --all
해주었다.
바뀐 내용을
git add .
git commit -m "[Delete] my_setting.py 삭제"
git push origin --force --all
로 git에 반영해준다. 확인해보니 해당 파일이 커밋기록에서 말끔히 사라졌다!💦
과제 pr을 날리려했으나, 이전에 날린 pr이 closed 되어 있었다.
재 pr시도를 여러번했지만 이전에 강제 push를 했던 탓인지..
날려지지 않았다.
그러던 와중에, 내 로컬코드가 다 날라가버리는
참사가 발생했다^^두 번째 시도(로컬 코드 복구)
삭제된 commit ID 확인
git reflog
를 치면
라는 기록을 보여준다.
여기서 7dafb80이 커밋해시 ID이다.
코드 복구하기
이제 돌아가고 싶은 커밋해시 ID를 확인한 뒤,
git reset --hard <커밋해시id>
를 쳐주면 그 당시의 코드가 로컬에 업데이트된다.
(cf. 브랜치 삭제도 이런식으로 복구 가능하다.)
이제 정말 pr을 해결해야 했다.
방법은 닫힌 pr을 다시 열든가,
브랜치를 새로파서 다시 pr 하거나...세 번째 시도(pr 되살리기)
깃이 추적하지 않는 파일 확인
git status
로 untracked file 을 확인해보자.
gitignore 파일에 my_setting.py가 잘 포함되어 있다.
브랜치를 새로 파서 작업하려 했으나, 그냥 fork부터 재작업했다.
왜냐면 master파일에 merge를 안해놔서 자꾸 꼬였기 때문이다.
=> 해결 완료❗❗❗
느낀점!
2시간 동안 현우오빠랑 삽질만 했다!
(오빠가 pr 닫았다가 다시 여는 데 성공했길래 톡보냈다.)
그래도 깃허브에 대해서 정~말 많은 것을 알게되었다.
오빠가 원격으로 코드 봐줬다...💦
쿼리가 뭔지도 몰랐는데, 이제는 ORM(python shell)으로 테이블도 만들고 속성도 확인하고 있다.
로컬이랑 원격저장소 구분도 못했는데, history 추적하면서 기록 지우고 있다.
MVT 패턴이 어떻게 흘러가는 건지 알았고, 하위 url에 어떻게 파고들어가는 건지도 알았다.
아직 pr이 왜 자동으로 닫힌건지는 모르겠지만..(강제 푸쉬해서 그런 듯)
과제를 하면서 너무 많은 걸 배웠다.
데베관리랑 REST API까지 배우면 너무 재밌을 거 같다.
이번 과제하면서, 수현이랑 현우오빠가 깃 코드를 계속 봐줬는데
너무...너무 감사합니다 ㅜㅜ💗
(안 봐줬으면 울고있었겠지...)
'백엔드' 카테고리의 다른 글
[Django] JWT TOKEN(access token, refresh token, crfs, cors error) (0) 2023.05.04 Modeling(데이터베이스 모델링) (0) 2023.04.02 django ch1 - ch4 (0) 2023.03.22 스프링 부트와 AWS로 혼자 구현하는 웹 서비스(-78p) (1) 2023.01.06 데이터베이스(MySQL) (0) 2022.08.30