Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

aeFactory

[Git] git checkout switch restore - 브랜치를 옮기고 수정 사항을 복원하는 법 본문

Git

[Git] git checkout switch restore - 브랜치를 옮기고 수정 사항을 복원하는 법

은하비 2023. 5. 17. 23:27

1. checkout switch restore를 함께 다루는 이유
2. switch
3. restore
4. checkout

1. checkout switch restore를 함께 다루는 이유

이 글에서는 $git checkout, $git switch, $git restore의 세 가지 명령어의 사용법에 대해 정리합니다. 세 가지 명령어를 동시에 다루는 이유는 checkout의 역할을 3가지로 쪼개 checkout, switch, restore가 나누어 하도록했기 때문입니다. 지금 switch나 restore를 써야할 곳이 checkout을 쓴다고 동작하지 않는 것은 아니지만 한 명령어는 한 가지 기능만 갖는 것이 좋기 때문에 분리하여 사용하는 것이 좋다고 생각합니다.

2. switch

switch 명령어는 브랜치를 이동하는데 쓰입니다. 새 브랜치를 만들면서 해당 브랜치로 이동할 수도 있습니다.

옵션 기능
$git switch <브랜치_이름> 브랜치를 옮김
$git switch -b <브랜치_이름> HEAD에 새 브랜치를 만들고 브랜치를 옮김
$git switch - 이전에 있던 브랜치로 다시 이동
$git switch -c <브랜치_이름> <commit_hash> 특정 커밋에서 새로운 브랜치를 만들고 브랜치를 옮김

3. restore

restore는 파일을 복원할 때 사용하는 명령어입니다. 파일의 수정 내용이 있을 때 이를 원래대로 복원하고 싶을 때 사용할 수 있습니다. add로 staging area로 넘어간 수정사항도 reset 명령어를 사용하지 않아도 복원 가능합니다.

옵션 기능
$git restore <pathspec> 특정 파일의 수정 사항을 기존 커밋 상태로 복원
$git restore --staged <pathspec> 특정 파일의 staging된 수정 사항도 기존 커밋 상태로 복원

4. checkout

자료 조사에 따르면 $git checkout 명령어는 $git switch$git restore로 완전히 분리, 대체된 것으로 보입니다. 하지만 특정 commit으로 checkout하던 $git checkout <commit_hash>의 경우 $git switch로는 동작하지 않았습니다. 동작방식으로만 보면 $git switch -c를 사용하는 것과 같지 않을까 생각할 수 있지만 $git checkout <commit_hash>의 경우 해당 커밋에 임시 브랜치를 만들어 detached HEAD 상태를 야기하고 원래 브랜치로 switch할 경우 그 임시 브랜치의 경우 남지 않지만 $git switch -c의 경우 새로 만든 브랜치가 그대로 남게 됩니다. 해당 명령어가 정상적인 git 사용 방식에서는 필요 없기 때문에 사라진 것인지 현재 제 학습 수준으로는 알 수 없었습니다.