둘셋 개발!

[Git & Github] git commit 되돌리기 (부제: 나의 깃 수난기....🙈) 본문

Git & Github

[Git & Github] git commit 되돌리기 (부제: 나의 깃 수난기....🙈)

23 2022. 8. 21. 16:36

평화롭게 git add, commit, push, merge 만 하고 있었다.

front 코드 쪽에서 .gitignore에 추가한 파일이 자꾸 깃에 의해 추적이 되어 고민하고 있었다.

그러던 중 git 캐시를 삭제하면 된다는 글을 발견하고

캐시를 삭제했다....

 

근데 모든 파일이 삭제되어버렸다....!!!!🙀🙀🙀

순간 깃 캐시를 삭제했기 때문에 commit으로 못돌아갈 까봐 정신을 놓어버렸지만 전의 commit으로 돌아갈 수 있다는 것을 발견하고

복구를 시작했다.


commit 되돌리는 방법 2가지

전의 commit으로 돌아가는 방법에는 2가지가 있다.

1. reset

2. revert

간단하게 말하면 이미 원격 저장소에 push 해버린 commit일 경우에는 revert
원격 저장소에 push를 하기 전일 때는 reset를 쓰면 된다.

1. reset

 

- 바로 전의 커밋으로 되돌아 가고 싶을 때

git reset HEAD^

 

- 두개 전의 커밋으로 되돌아 가고 싶을 때

git reset HEAD~2

 

- 정확한 커밋명을 입력해서 그 커밋으로 되돌아 가고 싶을 때

git reset <COMMMIT_ID>

 

이렇게만 했을 경우 옵셔닝이 default가 --mixed로 되어 있기 때문에

현재 작업중인 working directory에는 아무런 영향을 주지 않는다.

그래서 나의 경우에는 여전히 삭제된 채로 남아있어 계속 맨붕 상태였다.... (속마음: 아니 전의 커밋으로 돌아왔는데 왜 똑같아ㅠㅠㅠ)

 

하지만 옵셔닝 중 -hard를 사용했더니

삭제되었난 나의 소중한 파일들이 되돌아 왔다.

--hard을 사용할 경우 working directory도 해당 커밋모습으로 변하기 때문이다.

 

ex)

git reset --hard HEAD^

 

나의 경우는 로컬에서 변경한 내용이 없었기 때문에 --hard를 사용해도 상관없었지만

코드를 수정하고 이를 반영하려고 했다면 --hard를 쓰면 그 코드들이 날라가기 때문에 쓰면 안된다.

 

 

2. revert

사용법은 reset과 동일하다.

하지만 reset과 달리 revert는 전의 커밋으로 돌아 갔다는 흔적을 이력에 남기게 된다.

따라서 협업을 하고 있는 경우 이미 push한 commit 내역들은 전의 커밋으로 돌아갔다는 흔적을 남겨야만 다른 팀원들과의 충돌을 막을 수 있다.

 

 

다음부턴 구글링 해서 무조건 코드를 사용하지 말고.......정확히 이 코드가 어떤 영향을 미칠 수 있는지 까지 알아보고 사용하자...

'Git & Github' 카테고리의 다른 글

[Git & Github] 브랜치 이동하다가 실수..ㅠ  (2) 2023.06.13