git checkout 기능분리: switch / restore

강민석·2023년 1월 11일
1

1. 개요

아마 git을 다루는 사람중에 git checkout이라는 명령어를 안써본 사람은 없을 것이라고 생각한다.

개인적으로는 사용하면서도 해당 명령어의 기능이 꽤나 많다는 생각을 했었는데, git checkout 의 기능이 분리되었다는 이야기를 듣고 어떻게 개선이 되었는지를 정리해보려고 한다.

2. git checkout의 기능

먼저 1.개요에서 언급한 것처럼 git checkout의 기능은 생각보다 다양하다.

먼저 어떤 기능이 있는지 알아보자.

  • HEAD branch 변경
    git checkout {branch}
  • branch 생성 후, HEAD branch 변경
    git checkout -b {branch}
  • 특정 branch에서 branch 생성 후, HEAD branch 변경
    git checkout -b {new-branch} {root-branch}
  • 특정 파일을 HEAD 커밋 기준으로 복원
    git checkout {file}

위의 기능을 보면 알 수 있듯, 기능은 1.branch 변경2.HEAD 커밋 기준 파일의 복원으로 나누어 볼 수 있다. 명령어가 다양한 기능을 가지고 있는 것은 좋을까??

하나의 명령어로 마스터키처럼 모든 동작을 지원한다면 어떨지를 생각해보자. 물론 편한부분도 존재할 수 있지만 결국 기능의 정의가 명령어에서 옵션으로 변경되는 것 뿐이다. 그렇다면 동작을 나타낼 수 있는 명령어로 기능을 나누는 것이 더 좋을 것이다.

따라서 git에서는 2.23.0을 기점으로 두가지 기능을 지원하는 각각의 명령어를 제공한다.

3. git switch / restore

git switchgit restore는 각각 branch 변경과 파일의 복원을 지원하는 명령어이다. git checkout이 지원했던 두가지 기능을 하나씩 분리한 것이다.

3.1 git switch

그렇다면 각각의 명령어를 어떻게 사용하는지에 대해 알아보자.

  • HEAD branch 변경
    git switch {branch}
  • branch 생성 후, HEAD branch 변경
    git switch -c {branch}
  • 특정 branch에서 branch 생성 후, HEAD branch 변경
    git switch -c {new-branch} {root-branch}

먼저 위의 기능들은 앞서 2.git checkout의 기능에서 명시한 기능의 대체이다. git checkout에서의 branch 생성 옵션은 branch의 b를 따서 사용했지만, git switch에서는 create의 c를 따서 사용하는 것으로 확인할 수 있다. 어떤것이 더 직관적이라고 생각할지는 사용자의 몫인 것 같다. (개인적으로는 스위칭 후 명시한 branch를 생성한다는 명령옵션이 좀 더 직관적인 것 같다)

3.2 git restore

  • 특정 파일을 HEAD 커밋으로 복원
    git restore {file}
  • stage의 내용을 HEAD 커밋으로 복원
    git restore --staged {file}

이름과 같이 복원 위한 명령어이다. 특이한점으로는 명시한 restore의 두번째 명령어는 checkout의 대체제가 아니라는 것인데, 기존에는 git reset HEAD {file}과 같이 사용을 했어야 했다. 이처럼 복원의 명령어를 새롭게 정의하면서 흩어져있던 명령어들을 한곳으로 모으는 이점도 누릴 수 있게되었다.

4. 끝내는 말

위와 같이 브랜치 변경변경사항 복원의 기능을 git switch, git restore의 기능으로 나누면서 추후 두 기능의 옵션들을 추가하는 등의 확장에 용이한 상태가 되었다고 생각한다. 앞으로는 현행 유지만 될 git checkout보다는 신규 명령어를 쓰도록 하려고 한다.

0개의 댓글

관련 채용 정보