초보 개발자

3 - 4 브랜치 관리 본문

깃 & 깃허브

3 - 4 브랜치 관리

taehyeki 2021. 9. 14. 18:12
git reset  573ff3bb88d3d571257c341a5223445d65a80aa1​
git init test
cd test
vim c1.txt
git add c1.txt
git commit -m 'c1'

c1.txt에는 숫자 1을 입력해주자

 

git log를 실행해보자

HEAD->master에서 HEAD는 현재 작업트리가 어떤 버전을 기반으로 작업 중인지를 가리키는 포인터이다.

기본적으로 master브랜치를 가르키고 그 브랜치는 가장 최근의 커밋을 가리킨다.

c1 커밋을 만들면 HEAD는 master를 가리키고 master는 c1커밋을 가리킨다.

 

이제 sub라는 브랜치를 만들겠다.

git branch sub
vim c2.txt // 2입력
git add .
git commit -m 'c2'

여기서 새로만든 브랜치는 c1커밋(c1.txt만 가지고 있음)을 가리키고 방금 새로운 파일 (c2.txt)를 커밋한 master는 c2커밋(c1.txt와 c2.txt를 가지고 있음)을 가리킨다.

 

git checkout sub // 이제 HEAD가 sub브랜치를 가리킴
vim s1.txt // s1 입력
git add .
git commit -m 's1'

 

reset명령어를 이용해서 sub브랜치의 최신 커밋을 c2커밋으로 지정할 수 있다.

c2커밋의 해시 커밋을 가져와서 

git reset 573ff3bb88d3d571257c341a5223445d65a80aa1

이렇게 해주자

sub브랜치의 최신 커밋이 master브랜치의 최신 커밋인 c2로 바뀌었다. 그리고 HEAD는 그대로 sub를 가리키고 있따.

이제 브랜치는 c2커밋을 가리키고 있기 때문에 원래 가리키고 있던 s1커밋은 연결이 끊기면서 삭제되었다.

 

근데 여기서 의문이 기존의 c2에 있던 c2.txt가 사라졌다.

sub브랜치의 s1커밋에 있던 자료들을 가지고 온것이다. ( s1.txt , c1.txt )

그리고 master브랜치에서도 똑같이 s1.txt, c1.txt 파일이 생겼다...

 

뭐지..? 뭐땜에 굳이 s1브랜치의 자료를 무리하게 c2그것도 기존의 c2자료를 지우면서 까지 가져온걸까..

책에는 여기까지만 설명이 나와있어서 어떤 의도로 했는지 모르겠다... 차차 알아가보자

 

수정 중인 파일 감추기 및 되돌리기 - git stash

브랜치에서 파일을 수정하고 커밋하지 않은 상태에서 급하게 다른 파일을 커밋해야 하는 경우 실수로 다른 파일과 함께 커밋 될 수도있다 그래서 잠시 작업 중인 파일들을 감춰 둘 수도 있다. 

 

git stash // 수정한 파일들이 Changes not staged for commit 상태가 아니라 사라짐
git pop // stash 한 파일들을 꺼낼 수 있음
git stash apply // 저장된 수정 내용을 또 사용할 지도 모를 때 ! 가장 최근의 항목 되돌리지만 내용 남김
git stash drop // stash 목록에서 가장 최근항목 삭제