앞서 checkout과 reset 명령어를 본적이 있습니다.
이러한 명령어는 branch와 함께 사용하면 더욱 다양하게 사용할수 있는데요.
먼저 HEAD와 브랜치의 개념부터 보겠습니다.
우선 홈 디렉터리에서 test라는 저장소를 만들어 보겠습니다.
$cd ~
$git init test
$cd test
그런다음 k1.txt파일을 만들고 아무 내용이나 작성한뒤 k1이라는 메세지로 커밋을 하겠습니다.
$vim k1.txt
$git add k1.txt
$git commit -m "k1"
$git log
log를 통해 확인했을때 HEAD -> master로 HEAD가 master를 가르키고 있습니다.
여기에서 HEAD는 현재 작업트리가 어떤 버전을 기반으로 작업중인지를 가르키는 포인터입니다.
브랜치를 옮기지 않는다면 기본적으로 HEAD는 master브랜치를 가르킵니다.
또한 브랜치는 가장 최근에 커밋한 커밋내역을 가르키게 됩니다.
"k1"을 가르키고 있네요.
$git log --oneline
git log에 --oneline 옵션을 같이 사용하면 더욱 한눈에 볼수 있습니다.
$git branch sub
$git log
$git log --oneline
master브랜치과 sub 브랜치 모두 "k1"을 가르키고 있네요.
HEAD는 그대로 master 브랜치를 가르키고 있습니다.
$git checkout sub
k1.txt파일의 내용을 수정하고 다시 커밋해보겠습니다.
$vim k1.txt
커밋메세지는 "k2"입니다.
$git log
log를 확인해보면 master브랜치는 "k2"를 sub브랜치는 "k1"을 가르키고있습니다.
sun브랜치로 이동해보겠습니다.
$git checkout sub
$git log
sub 브랜치로 이동하게 되면 HEAD는 sub 브랜치를 가르킵니다.
또한 이전과 같이 sub브랜치는 "k1"을 가르키고 있네요.
이제 h1.txt를 만들고 "h1"메세지로 커밋하겠습니다.
$vim h1.txt
$git add h1.txt
$git commit -m "h1"
$git log
이제 HEAD가 가르키는 sub는 "h1"을 가르키고 있고 master 브랜치는 "k2"을 가르키고 있습니다.
$git log --oneline --branches
좀더 보기 편하게 하기 위해 해당 명령어를 사용했습니다.
이렇게 브랜치가 여러개 일때 reset 명령을 사용하기 위해서는 위에 나온 해쉬값을 이용하면됩니다.
현재 브랜치가 아닌 다른 브랜치에 있는 커밋을 골라 최신 커밋으로 저장할수 있습니다.
예를 들어 sub 브랜치에 있는 상태에서 master 브랜치에 있는 k2 커밋을 sub 브랜치의 최신 커밋으로 저장하려면 git reset 57bed7a 명령을 사용하면 됩니다.
$git reset 57bed7a
$git log --oneline --branches --graph
"k2"의 커밋상태로 되돌아간것을 볼수있습니다.
본 포스팅은 DO it! 지옥에서 온 문서 관리자 깃&깃허브 입문 도서를 참고하며 공부한 내용을 포스팅 하였습니다.
'Git > Github' 카테고리의 다른 글
[Git & GitHub] 원격저장소와 지역저장소 연결 (0) | 2022.06.23 |
---|---|
[Git & GitHub] 수정중인 파일 되돌리기(git stash) (0) | 2022.06.22 |
[Git & GitHub] 같은문서 수정 후 merge / 브랜치 삭제 (0) | 2022.06.20 |
[Git & GitHub] 브랜치(branch) 병합(merge) (0) | 2022.06.19 |
[Git & GitHub] 브랜치정보확인(새로운 브랜치에서 커밋) (0) | 2022.06.18 |