본문 바로가기
기타/Git

[Git] checkout

by 코딩하는 랄로 2024. 1. 3.
728x90

git checkout

이전 글에서 branch를 생성하는 법에 대해서 알아보았으니 이제 branch 사이를 이동하는 법에 대해서 알아보자. branch를 이동하기 위해서는 git checkout 명렁어를 사용해야 한다.

git checkout [branch 명]

 

해당 명렁어 뒤에 이동을 원하는 branch 명을 작성하면 해당 branch로 이동하게 된다. 이 때 해당 branch로 이동한다고 하는 표현의 대상은 누구일까? 바로 현재 branch를 가리키는 포인터인 HEAD이다.

 

git checkout 을 통해 branch를 변경하게 되면, HEAD가 가리키는 branch가 다른 branch로 이동하게 되는 것이다. 이제 실제로 사용해보자.

user@DESKTOP-UCJOAKJ MINGW64 /d/git/example (master)
$ git branch
* master
  ralro

user@DESKTOP-UCJOAKJ MINGW64 /d/git/example (master)
$ git checkout ralro
Switched to branch 'ralro'

user@DESKTOP-UCJOAKJ MINGW64 /d/git/example (ralro)

 

git branch 명렁어를 통해, branch 목록을 확인 후 ralro branch로 checkout 하였더니 현재 branch를 나타내는 소괄호안의 branch가 master에서 ralro로 바뀐것을 볼 수 있다.

 

이제부터, git의 branch를 좀 더 본격적으로 다루어보자. 먼저 현재 ralro branch에서 file4.txt 를 생성 후 커밋을 해보자.

user@DESKTOP-UCJOAKJ MINGW64 /d/git/example (ralro)
$ echo "file4" > file4.txt

user@DESKTOP-UCJOAKJ MINGW64 /d/git/example (ralro)
$ git add file4.txt
warning: in the working copy of 'file4.txt', LF will be replaced by CRLF the next time Git touches it

user@DESKTOP-UCJOAKJ MINGW64 /d/git/example (ralro)
$ git commit -m "file4 add"
[ralro b535f19] file4 add
 1 file changed, 1 insertion(+)
 create mode 100644 file4.txt

user@DESKTOP-UCJOAKJ MINGW64 /d/git/example (ralro)
$ git log --format=oneline
b535f1946f802b552b4465711b423e8aedbc1960 (HEAD -> ralro) file4 add
0aa91caa5c0df5947982b199202c6495c8d0aa59 (master) Add three files

 

commit 후 git log 명렁어를 통해 커밋을 조회해보니 master branch는 여전히 이전 커밋에 위치해 있고, 현재 HEAD가 가리키는 ralro branch는 새로운 커밋 개체를 가리키고 있는 것을 볼 수 있다.

 

이를 시각적으로 표현하면 다음과 같다.

여기서 master branch로 HEAD를 이동시킨 후, file5.txt 를 추가한 후 새로운 커밋을 생성해보자.

user@DESKTOP-UCJOAKJ MINGW64 /d/git/example (ralro)
$ git checkout master
Switched to branch 'master'

user@DESKTOP-UCJOAKJ MINGW64 /d/git/example (master)
$ echo "file5" > file5.txt

user@DESKTOP-UCJOAKJ MINGW64 /d/git/example (master)
$ git add file5.txt
warning: in the working copy of 'file5.txt', LF will be replaced by CRLF the next time Git touches it

user@DESKTOP-UCJOAKJ MINGW64 /d/git/example (master)
$ git commit -m "file5 add"
[master f642194] file5 add
 1 file changed, 1 insertion(+)
 create mode 100644 file5.txt

user@DESKTOP-UCJOAKJ MINGW64 /d/git/example (master)
$ git log --format=oneline --graph --all
* f6421947d66d855a74cec90d7631c680307ea31a (HEAD -> master) file5 add
| * b535f1946f802b552b4465711b423e8aedbc1960 (ralro) file4 add
|/
* 0aa91caa5c0df5947982b199202c6495c8d0aa59 Add three files

 

그 후에, git log 의 --all 옵션을 통해 모든 branch의 log 도 출력하고 이를 시각적으로 보기 위해서 --graph 옵션까지 추가하게 되면 위와 같은 결과를 볼 수 있다.

 

위의 결과를 좀 더 시각적으로 그림으로 나타내면 다음과 같다.

 

0aa91c 커밋 개체를 가리키고 있던 ralro, master branch가 각각 서로 다른 commit 개체를 가리키게 되면서 서로 갈라지게 된 것이다. 이때 각각의 브랜치를 이동하면서 working directory의 file을 확인해보면 ralro branch일 때에는 file4.txt가 master branch 일 때에는 file5.txt가 있는 것을 확인할 수 있다.

user@DESKTOP-UCJOAKJ MINGW64 /d/git/example (master)
$ ls
file1.txt  file2.txt  file3.txt  file5.txt

user@DESKTOP-UCJOAKJ MINGW64 /d/git/example (master)
$ git checkout ralro
Switched to branch 'ralro'

user@DESKTOP-UCJOAKJ MINGW64 /d/git/example (ralro)
$ ls
file1.txt  file2.txt  file3.txt  file4.txt

 

이렇게 git 은 branch를 생성하고 이동하는 것이 편하고 언제든지 다른 branch에서 작업을 하고 뒤에 배울 merge를 통해서 작업한 결과를 합치는 등의 작업을 다른 VSC에 비해서 워낙 쉽기 때문에 git을 사용하는 개발자들이 git의 branch를 최고의 장점이라고 여기며 수시로 만들어 사용하는 것이다.

 

 

 

 

reference : pro git

728x90

'기타 > Git' 카테고리의 다른 글

[Git] Conflict 기초  (2) 2024.01.08
[Git] Merge 기초  (0) 2024.01.04
[Git] branch 생성  (1) 2024.01.02
[Git] remote  (1) 2023.12.31
[Git] 되돌리기  (0) 2023.12.27