개발/Git

[Git] 안심하고 commit하자 reflog

growing-dev 2023. 1. 13. 23:05

아래 포스팅에서 자주 쓰는 명령어와 업무 flow를 정리해 보았다.

https://growing-dev101.tistory.com/20

 

[Git] 자주 쓰는 명령어

Git 자주 쓰는 명령어 내가 현업에서 Git을 사용하면서 자주 사용하는 순으로 나름대로 정리해 보았다. 실제로 더 디테일한 옵션을 사용하기도 하지만 아래 내용만으로도 대부분의 업무가 가능하

growing-dev101.tistory.com

 

터미널에서 Git을 잘 활용해서 복잡하게 얽힌 상황을 해결해야 할 때가 있고 또 그런 환경에서 실수하기 쉽다.

  • GitHub에서 원격 저장소가 여러 개이고 Fork 된 저장소까지 있다면 단순 작업을 하더라도 실수할 소지가 많다.
  • Merge나 Rebase가 제대로 되지 않아, 원격 저장소와 로컬 저장소의 상태가 많이 꼬여있는 경우
  • 실수로 작업했던 commit들을 git reset --hard로 날려버린 경우 등

이렇게 복잡한 상황이 오면, 그냥 다시 clone 받거나 reset 하여 다시 처음부터 작업하는 경우들이 있다.

나도 그랬고, Git에 익숙지 않으면 충분히 그럴 수 있다.

 

이럴 때 매우 유용한 명령어인 Git reflog를 소개한다.

 

Git이 강력한 이유는 바로 파일의 변경 히스토리를 저장한다는 것이다. 즉 기본 파일의 상태가 있고 변화할 때마다 변경점을 기록하여 저장하고 있다는 것이다. 이 히스토리를 따라가면 결국 어떤 시점의 파일 상태가 된다.

 

내가 Git 명령어로 수행을 하는 시점의 상태는 저장되어 있고 이것을 Git reflog를 통해 확인할 수 있다.

 

아래는 3가지의 상태 변화를 나타내주고 있다.

git reset 명령어를 통해 특정 상태로 강제 변환이 된다.

git reset --hard [commit id]

다시 git reflog를 해보면, log가 하나 더 쌓이고, 쌓인 로그의 상태가 기존 3d3d6d9와 동일함을 알 수 있다.

그리고 git log를 해보면 해당 commit의 상태인 Initial commit 상태로 HEAD가 변경되어 있음을 알 수 있다.

 

결론

Git의 강력함은 바로 여기서 나온다.

reflog가 있으니 복잡하다고 두려워하지 말고 commit, reset 하자.

반응형