소개
이 랩에서는 git switch와 git checkout 명령어의 주요 차이점을 배우게 됩니다. 각 명령어를 언제, 왜 사용해야 하는지, 그리고 Git 워크플로우를 간소화하는 데 도움이 되는 실용적인 예시와 사용 사례를 살펴볼 것입니다.
Git Checkout 이해하기
git checkout 명령어는 브랜치를 전환하거나 작업 트리 파일을 복원하는 데 사용되는 기본적인 Git 명령어입니다. 이 명령어는 작업 디렉토리의 파일을 지정된 브랜치 또는 커밋의 버전과 일치하도록 업데이트합니다.
git checkout을 사용하여 브랜치 간을 전환하는 방법을 먼저 살펴보겠습니다.
먼저, 프로젝트 디렉토리에 있는지 확인합니다:
cd ~/project
이제 현재 브랜치를 확인해 보겠습니다. 기본적으로, git init 후에는 main 또는 master 브랜치에 있습니다 (Git 구성에 따라 다름). 이 랩의 설정에서는 feature-branch를 생성했습니다.
git branch
다음과 유사한 출력이 표시되어 현재 브랜치가 별표 (*) 로 표시됩니다:
feature-branch
* main
이제 git checkout을 사용하여 feature-branch로 전환합니다:
git checkout feature-branch
전환을 확인하는 출력이 표시됩니다:
Switched to branch 'feature-branch'
다시 현재 브랜치를 확인해 보겠습니다:
git branch
이제 출력은 feature-branch에 있음을 보여야 합니다:
* feature-branch
main
git checkout을 사용하여 브랜치를 성공적으로 전환했습니다.
Git Switch 이해하기
git switch 명령어는 Git 2.23 에 도입된 새로운 명령어로, 특히 브랜치 전환을 위해 설계되었습니다. 과도하게 사용되는 git checkout 명령어에 비해 더 명확한 관심사 분리를 제공하는 것을 목표로 합니다.
git switch를 사용하여 다시 main 브랜치로 전환해 보겠습니다.
프로젝트 디렉토리에 있는지 확인합니다:
cd ~/project
이제 git switch를 사용하여 main 브랜치로 전환합니다:
git switch main
전환을 확인하는 출력이 표시됩니다:
Switched to branch 'main'
다시 현재 브랜치를 확인해 보겠습니다:
git branch
이제 출력은 main에 있음을 보여야 합니다:
* main
feature-branch
git switch를 사용하여 브랜치를 성공적으로 전환했습니다. 브랜치를 전환할 때 출력은 git checkout과 유사하다는 것을 알 수 있습니다.
Git Switch 로 브랜치 생성 및 전환하기
git switch의 편리한 기능 중 하나는 -c (또는 --create) 옵션을 사용하여 새로운 브랜치를 생성하고 동시에 해당 브랜치로 전환하는 기능입니다.
development라는 새로운 브랜치를 생성하고 해당 브랜치로 전환해 보겠습니다.
프로젝트 디렉토리에 있는지 확인합니다:
cd ~/project
이제 git switch -c를 사용하여 development 브랜치를 생성하고 전환합니다:
git switch -c development
새로운 브랜치가 생성되고 해당 브랜치로 전환되었음을 나타내는 출력이 표시됩니다:
Switched to a new branch 'development'
현재 브랜치를 확인하고 모든 브랜치를 나열해 보겠습니다:
git branch
출력은 새로운 development 브랜치를 표시하고 현재 해당 브랜치에 있음을 나타내야 합니다:
feature-branch
main
* development
이것은 git switch -c가 새로운 브랜치를 생성하고 즉시 작업하는 프로세스를 어떻게 단순화하는지 보여줍니다.
Git Checkout 으로 파일 복원하기
git switch는 주로 브랜치 전환에 사용되는 반면, git checkout은 파일 복원 기능을 유지합니다. 이는 두 명령어의 의도된 사용법의 주요 차이점입니다.
file1.txt를 변경한 다음 git checkout을 사용하여 변경 사항을 폐기하고 파일을 현재 브랜치 (development) 의 상태로 복원해 보겠습니다.
프로젝트 디렉토리에 있는지 확인합니다:
cd ~/project
file1.txt에 일부 내용을 추가합니다:
echo "Additional content" >> file1.txt
파일의 상태를 확인합니다:
git status
출력은 file1.txt가 수정되었음을 보여줍니다:
On branch development
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: file1.txt
no changes added to commit (use "git add" and/or "git commit -a")
이제 git checkout --를 사용하여 file1.txt에 대한 로컬 변경 사항을 폐기합니다:
git checkout -- file1.txt
다시 상태를 확인합니다:
git status
출력은 이제 작업 디렉토리에 변경 사항이 없음을 보여야 합니다:
On branch development
nothing to commit, working tree clean
file1.txt에 대한 변경 사항이 폐기되었고 파일은 development 브랜치의 상태로 복원되었습니다. 이 기능은 git switch가 아닌 git checkout에 의해 처리됩니다.
Git Checkout 으로 특정 커밋 확인하기
git checkout이 유지하는 또 다른 기능은 특정 커밋을 확인하는 기능입니다. 이렇게 하면 "detached HEAD" 상태가 되어 해당 시점의 프로젝트를 검사할 수 있습니다. git switch는 이 기능을 가지고 있지 않습니다.
먼저, 초기 커밋의 커밋 해시를 찾아보겠습니다.
프로젝트 디렉토리에 있는지 확인합니다:
cd ~/project
커밋 기록을 봅니다:
git log --oneline
다음과 유사한 출력이 표시되며, 커밋 해시가 포함됩니다:
<commit_hash_development> (HEAD -> development) Initial commit
<commit_hash_main> (main, feature-branch) Initial commit
커밋 해시는 환경에 따라 다를 것입니다. "Initial commit"에 대한 커밋 해시를 복사합니다.
이제 git checkout 다음에 커밋 해시를 사용하여 해당 특정 커밋을 확인합니다. <commit_hash>를 복사한 실제 해시로 바꿉니다.
git checkout <commit_hash>
detached HEAD 상태임을 나타내는 출력이 표시됩니다:
Note: switching to '<commit_hash>'
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:
git switch -c <new-branch-name>
HEAD is now at <commit_hash> Initial commit
이제 초기 커밋 당시의 프로젝트를 보고 있습니다. 브랜치로 돌아가려면 git switch 또는 git checkout을 사용하여 development 또는 main과 같은 브랜치로 다시 전환할 수 있습니다.
git switch를 사용하여 development 브랜치로 다시 전환해 보겠습니다:
git switch development
전환을 확인하는 출력이 표시됩니다:
Switched to branch 'development'
git checkout을 사용하여 특정 커밋을 탐색한 다음 git switch를 사용하여 브랜치로 성공적으로 돌아왔습니다.
차이점 요약
git checkout과 git switch의 주요 차이점을 요약하면 다음과 같습니다:
git switch: 주로 브랜치 간 전환에 사용됩니다. 이 특정 작업에 더 새롭고 집중된 명령어입니다. 또한 새 브랜치를 생성하고 해당 브랜치로 전환할 수 있습니다 (git switch -c).git checkout: 브랜치를 전환할 수 있는 더 다재다능한 명령어이지만, 특정 커밋을 확인 (detached HEAD 생성) 하고 파일을 복원하는 기능 (git checkout -- <file>) 도 있습니다.
git checkout이 브랜치 전환을 수행할 수 있지만, 더 명확한 의도와 관심사 분리 때문에 최신 Git 버전에서는 이 목적으로 git switch 명령어를 사용하는 것이 좋습니다. 파일을 복원하거나 특정 커밋을 탐색해야 할 때는 git checkout을 사용하십시오.
이제 git checkout과 git switch의 핵심 기능을 모두 탐색했으며 Git 워크플로우에서 각 명령어를 언제 사용해야 하는지 이해했습니다.
요약
이 랩에서는 git switch와 git checkout 명령어의 차이점을 배웠습니다. 두 명령어를 사용하여 브랜치를 전환하고, git switch로 새 브랜치를 만들고, git checkout으로 파일을 복원하고, git checkout으로 특정 커밋을 확인하는 연습을 했습니다. 이제 각 명령어의 의도된 사용 사례와 효율적인 Git 워크플로우에 어떻게 기여하는지 이해하게 되었습니다.



