✏️ 내가 겪은 문제
gitignore에 적었음에도 특정 폴더만 gitignore을 ignore🤣 무시하는 문제가 있어서 찾아보다가 방법 중
git rm -rf --cached .
방법이 있어서 해봤는데..
[참고]
https://stackoverflow.com/questions/3833561/why-doesnt-git-ignore-my-specified-file
일단 커밋할 작업 사항이 있었는데 git rm -rf --cached . 후 같이 올리니 remote 저장소에 원래 올라가있던 모든 파일이 사라지고 현재 올리는 커밋 사항만 남았다..? '망했다' 생각했지만 차분히 방법을 찾았다 ㅎㅎ
✏️ 해결 방법
git reset HEAD^
일단 위 명령어로 최근 commit을 취소하고 워킹 디렉터리를 되돌린다.
⇒ remote에 올라간 commit은 그대로 남아있다.
(한 번에 다시 올리기 위해 새로 추가한 파일도 git add 파일경로/파일명으로 추가하고) 다시 git add & commit을 조심스럽게 해 준다.
이후 그냥 git push를 하면 remote와 local 저장소의 내용이 다르기 때문에 올라가지 않는다.
(여기서 pull로 remote의 내용을 가져오면 망한다! => 나의 경우 remote의 파일들이 날아갔으니 가져오면 안 된다.)
git push origin main [branch명] -f
-f를 붙여 push 해주면 강제로 remote에 올라가 원래 잘못했던 커밋은 사라지고 새 커밋이 올라간다. 해결!
나는 일단 해보고 보는 편이지만 git은 정말 조심해야 하는 명령어가 많다.. 초반에는 잘못 건드리면 잘 몰라서 진짜 하루종일 걸릴 때도 있었는데 지금은 어느 정도가 해결 가능한지 판단이 되고 빨리 찾아서 복구해 뿌듯하다.
내가 잘못했던 git rm -rf --cached는 파일을 다 삭제하는 명령어였다 ^_^
// 원격 저장소(remote), 로컬(local) 저장소에 있는 파일 모두 삭제
git rm [filename]
// 원격 저장소에 있는 파일을 삭제
git rm --cached [filename]
// 원격 저장소에 있는 파일 모두 삭제
git rm --cached .
이후 처음 해결하려던 문제인 gitignore이 적용되지 않는 문제는 위 명령어로 해결이 되긴 했다.
remote repo 정리를 위해 gitignore에 썼었지만 remote에 잘못 올라간 파일 directory를 remote에서 삭제해주고 remote와 local repo를 일치시켜주기 위해 => git fetch를 통해 달라진 사항을 확인하고 git pull을 해주었다.
(내 경우에는 삭제한 폴더가 저장할 때마다 새로 업데이트되는 assets 폴더라 git pull로 삭제되고 바로 다시 만들어져 상관없었다. git pull로 현재 삭제될 작업 사항이 있다면 매우 조심하자.)
중간중간 git status(파일 상태 확인)와 git log(커밋 기록 보기) 명령어를 이용해 git 상태를 확인하면서 하자!
✏️ 문제 발생 이유
위 stackoverflow 링크 답변을 참고하면 gitignore은 이미 add 된 파일들을 무시하지 못한다. gitignore에 파일을 쓰기 전 git add . 명령어로 이미 staging 되어 remote에 올라간 것 같다.
=> 그렇다면 잘못 올라간 폴더를 삭제 후 remote와 local을 위에 쓴 것처럼 동기화시켜 주고, 잘못 staging 된 파일들을 unstaging 해 git add를 해줬으면 발생한 문제는 안 생겼을 것이다.
✏️ 추가 git 명령어
git add 취소하기
git reset HEAD [file]
[파일명] 없으면 전체 add 취소
(git add 전) staging area에 들어간 파일 다시 unstaging 시키기
git restore --staged [file name]
참고 사이트
push 한 git 되돌리기: https://inpa.tistory.com/entry/GIT-⚡️-git-add-commit-push-취소하기-💯-정리-git-reset-restore-clean
fetch: https://www.freecodecamp.org/korean/news/git-fetch-vs-pull/
git restore : https://kotlinworld.com/281
git rm : https://mygumi.tistory.com/103
😃 참고한 사이트들 덕분에 많은 도움을 얻었습니다. 공부하면서 정리한 글입니다. 잘못된 점이 있다면 피드백 주시면 감사합니다.
git 명령어는 조심 조심하자! 하지만 문제가 발생되고 "해결되면" 재밌다.. 배운다..!
'개발 지식 > Git' 카테고리의 다른 글
연결된 GitHub 저장소 초기화하기 (0) | 2023.11.05 |
---|---|
Git Commit Message Convention For Me (1) | 2023.10.03 |
[git] checkout의 기능, 변경사항 취소하기 (0) | 2023.10.02 |
이미 push한 git commit 삭제하기 (0) | 2023.08.29 |
이미 push한 commit message 수정하기! (0) | 2023.07.31 |