배경
이번에 javascript 스터디그룹과, 새로운 프로젝트를 진행하면서 github사용법에 대해서 다시 한번 익혀보고 정리하고자 한다.
git checkout이란?
HEAD를 특정 브랜치나, 커밋을 가르키게하여 이동하는 명령어이다.
이를 이용하여 이전에 작업했던 커밋으로 이동할 수 있고 detaced HEAD(분리된 머리) 상태가 된다. 이 상태에서는 커밋을 다시 남기거나 브랜치를 새로 만들어서 당시 작업을 확인하고 이어나갈 수 있다.
vs reset
reset은 커밋과 스테이징 자체를 취소하는 방법이다.
vs revert
커밋 기록은 남겨두고 변경내역을 취소할 수 있다.
git 2.23이후 변경점
checkout은 switch/restore가 나오기 전에 쓰이는 명령어였고 너무 많은 기능을 담고 있었기에 브랜치를 변경기능(switch), 파일 복원기능(restore)으로 일부 기능이 분리되었다.
PR 브랜치 전략

깃허브는 기본적인 Merge 외에도 squash merge와 rebase 옵션을 선택할 수 있다.
merge 두브랜치를 합쳐 공통된 base를 만들어낸다
여러 브랜치가 존재하고 작업이 복잡해질 수 록 history를 읽기 어려워진다.
rebase보다 merge conflict가 발생이 적다
squash merge

squash는 브랜치의 커밋을 하나로 합치고 새로운 커밋을 만들어 마스터에 합쳐준다.
commit history를 깔끔하게 할 수 있다.
rebase
커밋들은 master 브랜치 맨뒤로 일렬로 붙여준다
깔끔하고 선형적인 commit history를 만들 수 있다.
이전 history가 재정렬되기 때문에 merge comfilct와 데이터 유실의 위험성이 존재한다.
참고