branch, checkout, switch 기능 비교

기능 비교

기능 branch checkout switch
요약 브랜치 관리 다목적 명령 브랜치 전환/생성에 특화
브랜치 전환
(HEAD 이동)
X O
git checkout <branch name>
O
git swtich <branch name>
브랜치 생성 + 전환 X O
git checkout -b <branch name>
O
git switch -c <branch name>
브랜치 생성만 O
git branch <branch name>
X X
브랜치 삭제 O
git branch -d/-D <branch name>
X x
브랜치 이름 변경 O
git branch -m <new branch name>
X X
특정 커밋으로 이동
(HEAD 이동)
X O
git checkout <commit ID>
O
git switch -d <commit ID>
파일 복원 X O
git checkout -- <file>
X
브랜치 목록 확인 O
git branch [--list]
X X

리뷰

전체적으로 명령어가 중복되어 복잡하다. git checkout과 git switch는 겹치는 명령어도 많고, 둘의 옵션 이름이 미묘하게 다른 복잡함이 발생하고 있다.

git branch는 브랜치 생성과 삭제 등 관리에 특화된 점에서 차이가 크지만, 여전히 다른 두 명령어도 브랜치 생성이 가능하다는 점에서 복잡함을 제공하는 소지가 있다고 생각한다.

왜 이러한 원인이 발생하였는가?

기존에 git checkout 명령어가 다목적 명령어로서 여러 가지 기능을 가지고 있었다. 하지만 명령어의 목적이 많아지면 사용하기가 어려워지고 그 정체성이 모호해질 수 있기 때문에 git checkout 명령어를 세분화하고, 대체하는 명령어를 도입하게 되었다.

이후에는 어떻게 달라질까?

git checkout 명령어는 점차 권장되지 않는 상황이며, 이를 git switch 와 git restore 명령어로 대체하는 것이 권장되고 있다. git branch 명령어는 명확한 정체성을 가지고 있기 때문에 그대로 유지할 가능성이 높다.

-git switch : 브랜치 전환 및 생성에 특화
-git restore : 파일 복원에 특화