아래 포스팅에서 자주 쓰는 명령어와 업무 flow를 정리해 보았다.
https://growing-dev101.tistory.com/20
터미널에서 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 하자.
반응형
'개발 > Git' 카테고리의 다른 글
[Git] GitHub fork와 upstream을 활용한 안전한 Pull Request (0) | 2023.02.04 |
---|---|
[Git] Rebase와 Merge의 차이 by Visualizing-git (0) | 2023.02.02 |
[Git] 자주 쓰는 명령어, 익숙해지자 (0) | 2023.01.13 |
[Git] GitHub vs Gerrit (0) | 2023.01.09 |
[Git] 좋은 commit message 작성 (0) | 2023.01.08 |