git에서 파일 되돌리기
너무 망쳐버려서 git에 올려놓은 내용으로 돌아가고 싶을때
블로그 카테고리 나누는 작업 중에
절대 안고쳐지는 오류가 생겨서 너무 화남
그래서 이전 커밋으로 돌아가서 다시 시작하기로 결심
방법은 아주 아주 간단하다.
1
$ git reset --hard HEAD
이렇게 하면 가장 최근 커밋으로 돌아갈수 있음.
1
$ git reset --hard HEAD~2
이렇게 하면 두개 전 커밋으로 돌아간다.
끝~~~~~~~~~~~~~~~~~~~~
하지만 너무 날먹 방법이라 검색하며 찾은 내용을 정리해놔야겠다.
아주 사소한 내용을 commit 하고싶을 때
1
$ git commit --amend
위 방법은 이전 커밋을 없던 일로 만들고 새롭게 커밋을 하는 방법
-m 옵션을 안줘서 실행시 commit 메세지를 입력하는 창이 뜨는데
잘 보면 이전 메세지가 적혀있음.
그래서 그냥 끄면 동일한 메세지로 commit 완료
- 단, 이미 push했을 경우 약간 귀찮아짐
reset 사용법
일단 reset을 잘 사용하기 위해서는 git구조를 알아야됨
- git의 구조 (branch에 대해 잊으면 이해하기가 더 쉬움)
세가지의 트리가 있다고 하는데 받아들이기 어려우니까 세 영역이 있다고 생각하면 될듯
- working directory : 현재 작업중인 로컬 영역
- index(staging area) : git add 했을때 들어가는 영역(commit할 내용을 가지고있다고 보면 됨)
- head : git repository안의 commit 중 마지막 commit을 가리킴
commit한 모든 기록이 git repository안에 저장됨
file.txt를 세번 commit 했다고 하면 아래 사진과 같음
git reset –soft HEAD~
1
$ git reset --soft HEAD~
soft옵션 사용시 head만 이전 커밋으로 바뀐다.
HEAD가 file.txt (Ver.2)를 가리키고 있다.
git reset –mixed HEAD~
1
$ git reset --mixed HEAD~
head와 index가 이전 커밋으로 바뀐다.
아무 옵션 없을 때($ git reset HEAD~)와 동일한 기능
INDEX의 file.txt가 Ver.3에서 Ver.2로 바뀐 모습
git reset –hard HEAD~
1
$ git reset --hard HEAD~
head와 index와 working dir모두 이전 커밋으로 바뀐다.
working dir의 file.txt가 Ver.3에서 Ver.2로 바뀐 모습
결론
- 이미 push 했을 경우 귀찮아짐
github에 있는 파일과 working dir에 있는 파일이 달라지니까 merge를 해줘야됨
푸시도 중요할때 한번 - category 만들다가 화나서 복구하는 와중에
잘 모르고 썼던 git에대해 배우게 됨…
역시 화가나야 잘 배우는듯 - rebase는 머지?
- branch를 쓰면 더 안전하다
branch쓰는 습관 들이기
댓글남기기