21.2.2

0

위코드 사전스터디

목록 보기
26/36

<깃 공식 문서 읽어 보고 궁금했던 것 정리하기>

챕터는 3까지만 읽어보면 어느 정도 아주 기초 단계는 알 것 같다.

  • 브랜치 집중 공부
  1. git branch ~ 를 통해 만들어진 브랜치로 바로 이동하는 것이 아니라 master에 일단 있다. 이걸 확인하는 방법은 HEAD가 현재 어디를 가르키는가다.git log --oneline --decorate를 통해 현재 브랜치가 어떤 커밋을 가르키는지도 확인할 수 있다.

  2. 브랜치를 이동하는 방법은 git checkout 이다. ; 이 때 HEAD 위치가 바뀐다.

  3. 브랜치 생성 - 새 브랜치로 이동 - 커밋 - master브랜치로 이동 - 커밋 하면 양갈래로 갈라진다.(갈라지는 브랜치)
    갈라지는 브랜치

확인하는 방법 : git log --oneline --decorate --graph --all

  1. 브랜치 삭제 방법 : git branch -d

merge하지 않은 브랜치 강제 삭제는 대문자 사용.

주목할 점 : 모든 브랜치 작업은 현재까지는 로컬에서만 이뤄졌다는 것.

origin 으로부터 저장소 데이터를 모두 내려받고 master 브랜치를 가리키는 포인터를 만든다. 이 포인터는 origin/master 라고 부르고 멋대로 조종할 수 없다. 그리고 Git은 로컬의 master 브랜치가 origin/master 를 가리키게 한다. 이제 이 master 브랜치에서 작업을 시작할 수 있다.

이 때문에

* e5d40e3 (HEAD -> master, origin/master, origin/HEAD) Revert "work6.5"
*   be72a96 Merge branch 'master' into HEAD
|\  
| * 24c2719 work6.5
| * 34a7914 work5.5
* | 498f06a work5.5
|/  
* 43eeae5 work4
* c7a4c30 Revert "work3"
* 3e9aa63 work3
* e5977c5 work2
* e683b03 work1
  • 붉은 글씨로 origin/master, origin/HEAD 를 내 멋대로 통제할 수 없었던 것.(리모트 브랜치였음) 즉 디렉토리 하나를 클로닝 하면서 가져온 서버 내용이기 때문.(로컬 내용이 아님. 로컬 브랜치는 그냥 master)
  • 내 해석 : 현재 e5d40e3으로 머지 후 리버트 되어 있는 상태..?(즉 더 할게 없음..?) ; 왜냐면 변경 사항에 대해 하다가 보니 Push를 통해 모두 수정해버렸음.
  1. git pull = git fetch + git merge

  2. merge와 차이가 있는 rebase : 브랜치를 합치는 또 다른 방식

    Rebase 의 경우는 브랜치의 변경사항을 순서대로 다른 브랜치에 적용하면서 합치고 Merge 의 경우는 두 브랜치의 최종결과만을 가지고 합친다.

rebase만 하면 줄기는 합쳐지지만 내용이 병합이 되지 않는다.

# 과정 : iss 브랜치 만들고 커밋 - master에서 work7커밋 - iss에서 master로 리베이스한 상태.
* de50f5b (HEAD -> iss) rebase
* f8d2ded (master) work7
* e5d40e3 (origin/master, origin/HEAD) Revert "work6.5"
*   be72a96 Merge branch 'master' into HEAD
|\  
| * 24c2719 work6.5
| * 34a7914 work5.5
* | 498f06a work5.5
|/  
* 43eeae5 work4
* c7a4c30 Revert "work3"
* 3e9aa63 work3
* e5977c5 work2
* e683b03 work1

여기서 master로 이동 후 iss와 merge하면 이렇게 바뀐다.(완전 병합)

* de50f5b (HEAD -> master, iss) rebase
* f8d2ded work7
* e5d40e3 (origin/master, origin/HEAD) Revert "work6.5"
*   be72a96 Merge branch 'master' into HEAD
|\  
| * 24c2719 work6.5
| * 34a7914 work5.5
* | 498f06a work5.5
|/  
* 43eeae5 work4
* c7a4c30 Revert "work3"
* 3e9aa63 work3
* e5977c5 work2
* e683b03 work1

모양은 merge 상태와 비슷하다고 한다.

주의사항 : 로컬 브랜치에서 작업할 때는 히스토리를 정리하기 위해서 Rebase 할 수도 있지만, 리모트 등 어딘가에 Push로 내보낸 커밋에 대해서는 절대 Rebase 하지 말아야 한다.

profile
커피 내리고 향 맡는거 좋아해요. 이것 저것 공부합니다.

0개의 댓글