[LG CNS 6기] 1일차 TIL Git & GitHub - checkout 과 switch 차이

윤현일·2026년 7월 17일

LGCNS

목록 보기
1/43

[Git] checkout과 switch의 차이, 그리고 worktree 이해하기

Git에서 브랜치를 이동할 때 다음 두 명령어를 모두 사용할 수 있다.

git checkout main
git switch main

결과는 비슷해 보이는데, 왜 switch라는 명령어가 따로 존재하는 걸까?

이번 글에서는 checkout과 switch의 차이를 알아보고, AI 코딩 도구의 병렬 작업에서 자주 등장하는 git worktree까지 정리해 본다.

git checkout

checkout은 오래전부터 사용된 명령어로, 크게 두 가지 역할을 담당한다.

  1. 브랜치 또는 커밋으로 이동
  2. 파일을 특정 시점의 상태로 복구

브랜치 이동

git checkout main

브랜치를 생성하면서 이동

git checkout -b feature/login

파일의 변경 사항 복구

git checkout -- src/App.tsx

문제는 checkout 하나가 서로 다른 역할을 동시에 담당한다는 것이다.

git checkout feature/login

위 명령어는 feature/login 브랜치로 이동한다.

git checkout -- feature/login

하지만 --가 들어가면 feature/login이라는 경로의 파일을 복구한다는 의미가 된다.

Git은 전달받은 값이 브랜치인지, 커밋인지, 파일 경로인지 판단해야 한다. 이 때문에 처음 Git을 배우는 입장에서는 명령어의 의도를 파악하기 어렵고, 실수로 파일의 변경 사항을 제거할 수도 있다.

Git 공식 문서에서도 checkout의 주요 역할을 다음 두 가지로 설명한다.

  • 브랜치 전환
  • 워킹 트리 파일 복구

git switch

switch는 checkout이 담당하던 역할 중 브랜치 이동만 분리한 명령어다.
그래서 가끔 switch 만 되고, checkout 이 안되었던거다....

브랜치 이동

git switch main

브랜치를 생성하면서 이동

git switch -c feature/login

checkout에서는 -b를 사용하지만 switch에서는 -c, 즉 --create를 사용한다.

# checkout
git checkout -b feature/login

# switch
git switch -c feature/login

이전 브랜치로 이동

git switch -

main에서 feature/login으로 이동한 상태였다면 다시 main으로 돌아간다.

특정 커밋으로 이동

브랜치가 아닌 특정 커밋을 확인하고 싶다면 --detach 옵션을 사용한다.

git switch --detach <커밋 해시>

이 상태에서는 HEAD가 브랜치가 아닌 특정 커밋을 직접 가리키는 Detached HEAD 상태가 된다.

작업 내용을 보관하고 싶다면 새로운 브랜치를 생성해야 한다.

git switch -c feature/new-branch

자세한 동작은 git switch 공식 문서에서 확인할 수 있다.

checkout과 switch 비교

목적checkoutswitch
브랜치 이동git checkout maingit switch main
브랜치 생성 및 이동git checkout -b featuregit switch -c feature
이전 브랜치로 이동git checkout -git switch -
특정 커밋 확인git checkout <commit>git switch --detach <commit>
파일 복구가능불가능

checkout이 사라진 것은 아니므로 기존 명령어를 계속 사용해도 된다.

다만 명령어의 목적을 명확히 표현하려면 다음처럼 구분하는 편이 좋다.

# 브랜치 이동
git switch <브랜치명>

# 파일 복구
git restore <파일명>

그러면 git restore는 무엇일까?

restore는 checkout이 담당하던 역할 중 파일 복구 기능을 분리한 명령어다.

수정한 파일을 마지막으로 저장된 상태로 되돌릴 때 사용한다.

git restore src/App.tsx

현재 디렉터리의 모든 변경 사항을 되돌릴 수도 있다.

git restore .

스테이징한 파일을 스테이징 영역에서 내릴 때는 다음 명령어를 사용한다.

git restore --staged src/App.tsx

git restore로 되돌린 커밋되지 않은 변경 사항은 복구하기 어려우므로 실행 전에 git diff와 git status를 확인하는 것이 좋다.

git restore 공식 문서

정리하면 기존의 checkout 역할이 다음과 같이 분리된 것이다.

git checkout
├── 브랜치 이동 → git switch
└── 파일 복구   → git restore

결론

항상 원인을 몰라 상황에 따라 먹히는 명령어를 사용했는데, 이 기회에 싹 정리를 하니 뭔가 후련하다. 앞으로 이렇게 기본적인 것도 놓친게 있는지 꼼꼼히 확인하며 넘어가야겠다.
다음 포스팅은 워크트리 관련을 할 예정이다.

profile
개발자

0개의 댓글