git switch

Switch branches

Git 공식 매뉴얼(man git-switch)

그토록 길고 험난했던 checkout 수령 시절을 지내고 마침내 당도한 극강의 미니멀리즘 기능주의. 근데 왜 내 손가락은 아직도 c-h-e-c-k-o-u-t을 치고 자빠졌을까(...)

1. 개요

비대해져 갈피를 못 잡고 날뛰던 git checkout에서 '브랜치 전환' 기능만을 분리 독립시켜 탄생시킨 특화 명령어다. 오직 선로 전환수처럼 다른 브랜치로 깔끔하게 넘어가는 단 하나의 책무만을 위임받아, 가독성과 안정성을 비약적으로 향상시켰다.

2. 탄생 비화: 더 이상의 끔찍한 실수를 막기 위해

과거 Git 개발 팀은 뉴비들의 울부짖음을 마침내 경청하게 되었다. 똑같은 단어가 누군가에게는 새로운 세계(Branch)로의 탐험이고 누군가에게는 수정 파일 파괴의 참사라는 것 자체가 시스템 설계 오류임을 깨닫고, 2019년 말에 수술을 단행해 git switch를 투입했다. 이 명령어를 쓰면 실수로 원하지 않는 로컬 소스 코드를 과거 시점으로 돌려쳐 증발시킬 위험이 원천 봉쇄된다.1

3. 핵심적인 단축 기법과 활용

가장 빈번하게 쓰이는 기법은 역시 git switch -c <new-branch>다. 이는 기존의 git checkout -b와 완전히 동일하며, 새로운 브랜치를 산뜻하게 창조해냄과 동시에 그곳으로 0.1초 만에 안전히 순간이동을 시켜준다. 원격 저장소에 있는 브랜치를 가져올 때도 똑똑하게 --guess 옵션이 디폴트로 작동해, 이름만 같으면 원격 브랜치를 트래킹하는 로컬 브랜치를 바로 구성해준다.

4. 실제 사용 예시

브랜치 이동만 명확하게 처리하고 싶을 때 쓰는 현대적인 명령어다. checkout보다 의도가 읽기 쉽다.

# 기존 브랜치로 이동
git switch main

# 새 브랜치를 만들고 바로 이동
git switch -c feature/login

# 직전에 있던 브랜치로 되돌아가기
git switch -

원격 브랜치를 기준으로 로컬 브랜치를 만들 때도 자주 사용한다.

git fetch origin
git switch -c feature/login origin/feature/login

5. 관련 밈 및 드립

5.1. 체크아웃 퇴마 의식

시니어 개발자나 꼰대들이 옆에서 화면을 보면서 굳이 낡아빠진 git checkout을 갈겨대고 있으면, 조용히 슬그머니 다가가 "선배님, 요즘은 트렌디하게 git switch 씁니다만?" 하고 지적해 주며 그의 동공지진을 감상하는 시건방진 주니어의 참교육 드립이다.

5.2. switch - (마이너스) 마술

단순히 git switch -를 치면 바로 직전에 머물렀던 브랜치로 핑퐁처럼 순간이동한다. 두 브랜치를 오가며 열정적으로 작업하는 중에는 이 이상으로 섹시한 뒤통수를 동료들에게 뽐낼 수 있는 방법이 별로 없다.

6. 여담

  • 기억 상실: 안타깝게도 이 명령어가 세상에 나온 지 수년이 훌쩍 지났음에도 구글링 검색 결과나 해외 튜토리얼 블로그 상위권에는 여전히 checkout으로 설명이 점철되어 있어 신규 유입자들을 영원히 헷갈리게 만든다.
  • 실험 상태 딱지: 공식 문서에 수년 동안 '실험적 기능(experimental)' 꼬리표가 매달려 있었으나, 이미 전 세계 모든 실무자들이 뼈저리게 애용 중이라 사실상 무의미한 딱지였다.
  • 강제 이주: --discard-changes 옵션을 억지로 주어 switch를 치면, 작업 중이던 더러운 손때 파일들을 과감히 쓰레기통에 내버리며 깔끔한 척 새 브랜치로 이사할 수도 있다.

7. 관련 문서

각주

  1. 실제로 switch는 대기 중인 변경 불일치가 심할 경우 절대 덮어쓰지 않고 에러를 터트리며 얌전하게 멈춰 선다.