아마 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
보다는 신규 명령어를 쓰도록 하려고 한다.