신규 서비스 출시를 위해서 사용하던 Git 커밋을 정리하던 도중 자주 사용하지만 매번 까먹어서 구글링을 하게 되는 명령어를 정리하자는 마음으로 글을 작성하게 되었다. 이번 출시의 프론트엔드를 혼자서 구현한 만큼 협업을 위한 신경을 쓰지 않았기 때문에 커밋이 매우 지저분하여 정리할 것이 많았다.

Git 커밋 메시지 합치기

git rebase --interactive HEAD~1를 사용하면 아래부터 최신순이 기록된 파일이 나타난다. 만약 처음부터 수정하길 원한다면 git rebase --interactive --root를 사용하자. rebase를 하다가 꼬이면 git rebase --abort를 사용하자

squash, fixup 명령어는 아래에 있는 최신 커밋이 사라지고 위의 커밋과 합쳐진다.

HEAD를 사용하다보니 ‘^’과 ‘~’에 무슨 차이가 있는지 궁금했는데, 단순히 부모가 둘 이상일 경우에 ‘^’를 통해서만 다른 부모 지정이 가능하고 알면 될 것 같다.

참고
– Git rebase: https://git-scm.com/book/ko/v2/Git-도구-히스토리-단장하기
– HEAD에서 ‘^’, ‘~’ 차이: https://stackoverflow.com/questions/2221658/whats-the-difference-between-head-and-head-in-git

커밋 취소

커밋을 취소하고 수정된 파일을 보존하고 staged 상태로 올리려면 git reset --soft HEAD^
커밋을 취소하고 수정된 파일을 보존하고 unstaged 상태로 올리려면 git reset --mixed HEAD^
커밋을 취소하고 수정된 파일을 보존하지 않으려면 git reset --hard HEAD^
수정을 다 날리고 원격 저장소의 마지막 commit 상태로 돌리려면 git reset --hard HEAD

git add를 취소하려면 git reset HEAD filename

참고
https://gmlwjd9405.github.io/2018/05/25/git-add-cancle.html

Git flow 사용법

설치 brew install git-flow-avh

초기화 git flow init -d 기본값으로 브랜치 생성

feature
git flow feature start <feature name>
git flow feature publish <feature name>
git flow feature pull origin <feature name>
git flow feature finish <feature name>


release
git flow release start <version>
git flow release publish <version>
git flow release track <version>
git flow release finish <version>


git push --tags

hotfix
git flow hotfix start <version>
git flow hotfix finish <version>


참고
– 명령어: https://soft.plusblog.co.kr/20
– 그림설명: https://danielkummer.github.io/git-flow-cheatsheet/index.ko_KR.html
– 우아한형제들 사례: https://woowabros.github.io/experience/2017/10/30/baemin-mobile-git-branch-strategy.html

버전 명명

버전은 (Release number).(Major number).(Minor number)가 가장 깔끔한 것 같다.
Release number: 큰 변화가 있을 때
Major number: 주요 기능 추가, 변경이 있을 때
Minor number: 버그 수정 등 미미한 변화가 발생했을 때

참고
– 버전 이해하기: http://seorenn.blogspot.com/2012/02/version.html

Merge 기초

참고
– 브랜치와 Merge 의 기초: https://git-scm.com/book/ko/v2/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EB%B8%8C%EB%9E%9C%EC%B9%98%EC%99%80-Merge-%EC%9D%98-%EA%B8%B0%EC%B4%88

Remote에 올라간 git tag 삭제

git push --delete origin YOUR_TAG_NAME

참고
– remote에 올라간 git tag 삭제: https://88240.tistory.com/527