본문 바로가기

IT/설계관련

【git】브랜치 관리하기

참고도서 :  Do it!  지옥에서 온 문서 관리자 깃&깃허브 입문
git Windows 설치설명 : https://youtu.be/JKT9laOAPIs

 

브랜치에서 checkout과 reset의 작동 원리

1. 홈 디렉터리로 이동후 test라는 깃 저장소를 만들고 test 디렉토리로 이동

2. 텍스트에디터로 c1.txt 파일을 만들어 숫자 12345을 입력하고 저장 합니다. 이번에는 내용이 중요한 것이 아니기 때문에 아무 내용을 입력해도 됩니다. 그리고 만든 c1.txt를 스테이지에 오리고 커밋합니다.

3. git log명령을 실행하면 커밋 로그  첫 번째 줄에(HEAD -> master) 표시가 있는데 여기에서 HEAD는 현재 작업 트리(워킹 디렉터리)거 어떤 버전을 기반으로 작업 중인지를 가르키는 포인터입니다. HEAD는 기본적으로 master 브랜치를 가르킵니다. 그리고 브랜치는 기본적으로 브랜치에 담긴 커밋 중에서 가장 최신의 커밋을 가르킵니다.

$ git log --oneline

 

4. sub 브랜치를 만들어서 sub 브랜치 또한 c1커밋을 가르키고 있음을 확인

$ git branch sub

5. 텍스트에디터로 c2.txt 파일을 만들고 숫자 '2'를 입력한 후 저장합니다. 그리고 방금 만든 c2.txt를 스테이지에 올리고 'c2'라는 메시지와 함께 커밋을 합니다. 이제 master는 c2 커밋을 가르 키게 됩니다. HEAD는 그대로 master 브랜치를 가르키고 있습니다.

6. sub 브랜치에 커밋을 만들어 보겠습니다. master 브랜치에서 sub 브랜치로 이동하려면 git checkout 명령을 사용하여 이동하면 HEAD가 sub 브랜치를 가르키게 됩니다.

$ git checkout sub

7. sub 브랜치에서 텍스트에디터를 사용하여 s1.txt 를 작성하고 내용을 s1이라고 입력하고 저장합니다. s1.txt 파일을 스테이지에 올리고 's1'리아는 메시지와 함께 커밋하세요. 이제 HEAD는 sub브랜치를 가르키고 sub는 s1커밋을 가르키고 있습니다.

8. 브랜치가 여러 개 일 때 reset 명령은 어떻게 사용할지 알아봅시다. [【git】작업 되돌리기]에서는 reset 명령으로 master 브랜치에 있던 여러 커밋 중 하나를 선택하여 되돌아 갔습니다. 브랜치가 여러 개의 경우 현재 브랜치가 아닌 다른 브랜치에 있는 커밋을 골라서 최신 커밋으로 지정 할 수 잇습니다. 

$ git log --oneline --branches

9. git reset 명령 다음에 c2 커밋의 커밋 해시를 입력합니다. (위의 그림의 3459857)

$ git reset 3459857

10. 결과는 어떻게 되었을까요? git log 명령어로 확인해 보겠습니다.

$ git log --oneline --branches --graph

11. sub 브랜치의 최신 커밋이 master 브랜치의 최신 커밋인 c2로 바뀌였습니다. HEAD는 그대로 sub 브랜치를 가리키고 있으며, git reset 명령을 사용하면 현재 브랜치가 가르키는 커밋을 여러 브랜치 사이를 넘나드면서 제어할 수 있습니다.

이제 sub 브랜치는 c2 커밋을 가르키고 있기 때무에 원래 가르키고 있던 s1 커밋은 연결이 끊기면서  삭제 됩니다.


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

브랜치에서 파일을 수정하고 커밋을 하지 않은 상태에서 급하게 다른 파일을 커밋해야하는 경우 사용하는 명령어

1. st 라는 깃 저장소 생성

2. git stach 명령을 사용하기 위해서는 파일이 tracked 상태여야 한다. 즉 한번은 커밋이 된 상태.

f1.txt 파일을 작성하고 커밋을 합니다.

3. 추가로 f2.txt 파일을 작성하고 커밋을 합니다.

4. 텍스트에디터로 f1.txt, f2.txt파일을 열어 수정

5. git status 명령을  실행해 상태를  확인

6. f1.txt 파일과 f2.txt 파일을 커밋하기 전에 다른 파일을 수정해야 한다고 가정하면, 커밋하지 않은 수정 내용을 어디에 보관하려면 git stash 명령을 사용합니다.(git statshsave 또는 git stash)

$ git stash

7. git status 명령어로 상태를 확인합니다.

5번에서 확인한 modified 메시지가 없어진것을 확인 할 수 있습니다.

8. 같은 방법으로 여러 파일을 수정후 보관할 수 있으며, 이렇게 감춘 파일들은 stash목록에서 확인이 가능하다. 

가장 먼저 감춘 것은 stash@{0}에 들어 있으며, 앞으로 다른 파일이 추가 되면 기존 파일은 stash@{1}로 옮겨지고 새로 추가된 파일은 stash{0}에 담깁니다. 먼저 감춘것은 아래에, 가장 최근에 감춘 것을 위에 쌓기 때문에 shash 스택(stack)이라고도 표현합니다.

9.  급한 작업을 모두 마쳤다면 감춰든 파일을 꺼내와 계속 수정하거나 커밋을 할 수 있습니다. git stash 명령뒤에 pop를 추가하면  stash 목록에서 가장 최근 항목을 되돌립니다. 여기에서  f1.txt와 f2.txt가 수정된 상태로 되돌아 갑니다

$ git stash pop

stash apply와 stash drop
stash 목록에 저장된 수정 내용을 나중에 또 사용할지도 모른다면 git stash apply 명령을 사용합니다. stash 목록에서 가장 최근 항목을 되돌리지만 저장했던 내용은 그대로 남겨둡니다.

git stash drop 명령은 stash 목록에서 가장 최근 항목을 삭제합니다.


반응형