아마 git을 다루는 사람중에 git checkout이라는 명령어를 안써본 사람은 없을 것이라고 생각한다.
개인적으로는 사용하면서도 해당 명령어의 기능이 꽤나 많다는 생각을 했었는데, git checkout 의 기능이 분리되었다는 이야기를 듣고 어떻게 개선이 되었는지를 정리해보려고 한다.
먼저 1.개요에서 언급한 것처럼 git checkout의 기능은 생각보다 다양하다.
먼저 어떤 기능이 있는지 알아보자.
git checkout {branch}git checkout -b {branch}git checkout -b {new-branch} {root-branch}git checkout {file}위의 기능을 보면 알 수 있듯, 기능은 1.branch 변경과 2.HEAD 커밋 기준 파일의 복원으로 나누어 볼 수 있다. 명령어가 다양한 기능을 가지고 있는 것은 좋을까??
하나의 명령어로 마스터키처럼 모든 동작을 지원한다면 어떨지를 생각해보자. 물론 편한부분도 존재할 수 있지만 결국 기능의 정의가 명령어에서 옵션으로 변경되는 것 뿐이다. 그렇다면 동작을 나타낼 수 있는 명령어로 기능을 나누는 것이 더 좋을 것이다.
따라서 git에서는 2.23.0을 기점으로 두가지 기능을 지원하는 각각의 명령어를 제공한다.
git switch와 git restore는 각각 branch 변경과 파일의 복원을 지원하는 명령어이다. git checkout이 지원했던 두가지 기능을 하나씩 분리한 것이다.
그렇다면 각각의 명령어를 어떻게 사용하는지에 대해 알아보자.
git switch {branch}git switch -c {branch}git switch -c {new-branch} {root-branch}먼저 위의 기능들은 앞서 2.git checkout의 기능에서 명시한 기능의 대체이다. git checkout에서의 branch 생성 옵션은 branch의 b를 따서 사용했지만, git switch에서는 create의 c를 따서 사용하는 것으로 확인할 수 있다. 어떤것이 더 직관적이라고 생각할지는 사용자의 몫인 것 같다. (개인적으로는 스위칭 후 명시한 branch를 생성한다는 명령옵션이 좀 더 직관적인 것 같다)
git restore {file}git restore --staged {file}이름과 같이 복원 위한 명령어이다. 특이한점으로는 명시한 restore의 두번째 명령어는 checkout의 대체제가 아니라는 것인데, 기존에는 git reset HEAD {file}과 같이 사용을 했어야 했다. 이처럼 복원의 명령어를 새롭게 정의하면서 흩어져있던 명령어들을 한곳으로 모으는 이점도 누릴 수 있게되었다.
위와 같이 브랜치 변경과 변경사항 복원의 기능을 git switch, git restore의 기능으로 나누면서 추후 두 기능의 옵션들을 추가하는 등의 확장에 용이한 상태가 되었다고 생각한다. 앞으로는 현행 유지만 될 git checkout보다는 신규 명령어를 쓰도록 하려고 한다.