본문 바로가기

Development/Git

Git checkout과 switch의 차이

Git을 사용하다 보면 브랜치를 변경할 때 git checkout을 정말 많이 사용합니다.

그런데 어느 순간부터 예제나 공식 문서를 보면 git switch를 사용하더라고요.

처음에는 "둘이 뭐가 다른 거지? 그냥 이름만 바뀐 건가?"라고 생각했는데, 찾아보니 Git에서 명령어의 역할을 명확하게 분리하기 위해 추가된 명령이었습니다.

이번 글에서는 checkout과 switch의 차이를 간단하게 정리해보겠습니다.


checkout은 원래 이것저것 다 하던 명령어였다.

예전에는 checkout 하나로 거의 모든 작업을 했습니다.

 
git checkout develop      # 브랜치 변경
git checkout -b feature   # 브랜치 생성 후 이동
git checkout v1.0.0       # 태그 이동
git checkout HEAD~1       # 특정 커밋 이동
git checkout -- file.txt  # 파일 복원
 

보다시피 같은 checkout인데 상황마다 하는 일이 전부 다릅니다.

  • 브랜치 이동
  • 브랜치 생성
  • 특정 커밋 이동
  • 태그 이동
  • 파일 복원

처음 Git을 배울 때는 이게 꽤 헷갈렸습니다.


그래서 switch가 생겼다.

Git 2.23부터는 역할을 나눴습니다.

  • git switch → 브랜치 관련 작업
  • git restore → 파일 복원

즉, 브랜치와 파일 작업을 아예 분리한 것입니다.

덕분에 명령어만 봐도 어떤 작업인지 바로 이해할 수 있게 되었습니다.


브랜치 이동

예전에는 이렇게 했습니다.

 
git checkout develop
 

지금은 이렇게 사용하는 것이 권장됩니다.

 
git switch develop
 

동작은 동일합니다.


새 브랜치 생성

기존에는

 
git checkout -b feature/login
 

이렇게 사용했다면,

이제는

 
git switch -c feature/login
 

을 사용하면 됩니다.

-c는 create의 의미입니다.


태그나 특정 커밋으로 이동

이 부분은 약간 차이가 있습니다.

checkout은 그냥 이동합니다.

 
git checkout v1.0.0
 

반면 switch는 Detached HEAD 상태라는 것을 명시해야 합니다.

 
git switch --detach v1.0.0
 

실수로 브랜치를 이동하는 것과 특정 커밋으로 이동하는 것을 구분하기 위해서라고 보면 됩니다.


파일 복원은 restore

예전에는 파일 복원도 checkout으로 했습니다.

 
git checkout -- README.md
 

이제는

 
git restore README.md
 

를 사용합니다.

개인적으로는 restore가 훨씬 직관적인 것 같습니다.


그래서 뭘 쓰면 될까?

사실 지금도 checkout을 사용하는 프로젝트는 정말 많습니다.

당장 회사에서도 많이 사용하고 있고, 없어질 명령어도 아닙니다.

다만 새롭게 Git을 배우거나 새로운 프로젝트를 시작한다면 switch와 restore를 사용하는 것이 더 좋다고 생각합니다.

명령어의 역할이 명확해서 읽기도 쉽고, 나중에 봐도 어떤 작업을 했는지 이해하기 편하기 때문입니다.


정리

기능checkoutswitch
브랜치 이동 O O
브랜치 생성 O O
태그/커밋 이동 O O (--detach)
파일 복원 O X (restore 사용)

결국 핵심은 하나입니다.

checkout은 만능 명령어이고,

switch는 브랜치 작업만 담당하는 명령어입니다.

Git이 점점 역할을 분리하는 방향으로 발전하고 있기 때문에 앞으로는 switch와 restore를 익숙하게 사용하는 것이 좋을 것 같습니다.

728x90
반응형

'Development > Git' 카테고리의 다른 글

Git 로컬을 원격 상태로 초기화 하는 방법  (0) 2025.10.25
git cherry pick  (0) 2024.01.05
Git Contribute 절차  (0) 2021.12.10
다른 브랜치에서 pull 하면 어떻게 될까???  (0) 2020.12.07
github page 에 테마 설치  (0) 2020.10.20