IoT Gateway 프로젝트를 진행하며, 생겼던 Git 문제에 대해 적어보고자 한다.
(+) 필자는 Issue 번호를 이용해 Branch를 생성했다. #Issue번호로 Branch를 생성하면

위와 같이 Issue와 Pull request가 연결된다.

위 사진은 develop 브랜치에 #1을 merge 시킨 후의 상태이다.
merge된 내용을 rebase를 통해 #2로 가져오면서 pom.xml에 대한 conflict가 발생했다.




위 사실을 알아채지 못하고 push해 해당 push 취소 작업이 필요해졌다!
git reflog : reference log를 의미하며, 로컬 저장소에서 HEAD가 가리키고 있었던 참조 기록을 확인할 수 있는 명령어다. .git/logs/refs/heads/. 혹은 .git/logs/HEAD 에 기록된다.
git reset : HEAD의 포인터를 특정 시점으로 변경해주는 명령어다. (--hard : 파일의 내용을 완전 삭제시키는 옵션)git reflog로 얻어낸 참조 기록을 통해 필자가 원하는 시점을 얻어내 reset 시킬 수 있었다.
git reset --hard HEAD@{num}

예시를 위한 사진으로 git reflog와 기록이 상이할 수 있습니다.
reset 후, git push -f origin branch 로 필자의 push를 취소해 초기 문제발생의 시점으로 돌려낼 수 있었다. (-f: force 옵션은 사용을 자제해야 한다…)
필자는 위처럼 해결했으나, 사실 잘했다가 아닌 문제 수습이다… 이런 일을 막기 위해 push 전에 반드시 잘 확인하고, 어떤 방법으로 문제를 해결해야 할지 더 고민해봐야 할 것이다.
git merge를 사용해보기로 했다. (--no fast forward로 merge 커밋만 남겼다.)
git에 많이 익숙해졌다고 생각했으나 아니었던 것 같다. 내가 쓰고 있는 명령어가 어떤 의미인지, 어떻게 작동하게 되는지 다시 보게 되었고, 몰랐던 명령어가 아직도 남아있음을 한 번 더 느낄 수 있었다.