지옥에서 온 Git

branch 수련

수업소개

이 수업에서는 지금까지 배운 git으로 수련을 하실 수 있도록 공식 홈페이지의 내용을 소개해드립니다. 실행은 직접 해보시길 바랄께요. 그리고 fast forward와 merge commit의 차이점도 소개해드립니다.

수업

 

참고

브랜치와 Merge의 기초(pro git)

댓글

댓글 본문
작성자
비밀번호
  1. 김수현
    https://git-scm.com < git의 공식홈페이지
    공식메뉴얼이 있음 > Documentation > Book > 각각의 언어별로 있음
    브랜치와 Merge 의 기초 > 패스포워드라는 방식과 아닌 방식으로 머지하는 방법이 나옴
    그 것을 비교하는 내용임. 이 문서를 보고 수련을 했으면 좋겠음.
    설명이 이해하기 어려운 것이 있음. 그래서 말로 설명해 드리겠음. 각자 수련해 보시기 바람.

    기능의 추가/버그의 수정(<---어떤 일들이 생김)
    깃에서는 바로 브랜치를 만듬(이슈 하나를 해결하기 위해서)
    어떤 명령을 사용할까?
    git checkout -b iss53
    이것은 git branch "iss53" + git checkout iss53을 의미함(한줄로 적은 것임) (3:10)
    내용을 수정하고 커밋을 하게되면 그림이 어떻게 바뀔까?
    $ vim index.html
    $ git commit -a -m 'added a new footer [issue 53]'
    이렇게 바뀌겠죠? 분기
    그런데 급하게 처리해야 할 일이 생긴 것임. 그 일을 해결하기 위해 master브렌치에서 브랜치를 새로 생성할 것임.
    $ git checkout master
    $ git checkout -b hotfix <--hotfix 라는 브렌치를 새로 만듬
    그리고 파일을 처리하고 커밋을 하면
    $ vim index.html
    $ git commit -a -m 'fixed the broken email address'
    그림의 모양이 바뀔 것임
    hotfix의 일을 끝내고 master브렌치로 병합을
    $ git checkout master
    $ git merge hotfix
    그 때 어떤 메시지가 뜨냐하면 Fast-forward
    이것이 여러분이 머지를 했을 때 경험하는 첫번째 상황임
    영어로 빨리 감기라는 뜻임
    빨리 감기라는 것이 무엇일까?
    hotfix브렌치 변경후 병합까지 master브렌치는 어떤 변화도 없었음
    이상태에서 master브렌치로 hotfix브렌치를 병합한다는 것은
    master브렌치를 hotfix브렌치로 빨리 감기를 하면 병합작업이 끝난다 > 이런 형식의 브렌치를 Fast-forward라고 부름
    그리고 그 결과의 그림은 이렇게 됨(위에 올라탄 그림-master브렌치는 hotfix브렌치를 가리키게 됨)
    그렇기 때문에 별도의 commit을 생성하지 않음.(별도의 커밋을 생성하는 것이 기본이지만)
    마스터가 가리키는 커밋이 누구인지를 바꾸기만 함 > 그래서 이것을 Fast-forward라고 부름
    그리고 hotfix가 끝났고 브렌치가 많으면 지저분 하므로 지움($ git branch -d hotfix)
    그리고 다시 이슈를 처리함
    $ git checkout iss53
    Switched to branch "iss53"
    $ vim index.html
    $ git commit -a -m 'finished the new footer [issue 53]'
    [iss53 ad82d7a] finished the new footer [issue 53]
    1 file changed, 1 insertion(+)
    커밋까지 함
    그러면 그림이 이렇게 됨
    일이 끝났으므로 > 마스터로 머지함.
    이때 메시지가
    $ git checkout master
    Switched to branch 'master'
    $ git merge iss53
    Merge made by the 'recursive' strategy.
    README | 1 +
    1 file changed, 1 insertion(+)

    제귀적인 전략 > 이슈53이 변하고 + 마스터도 변했음
    이런 경우 패스트 포워드를 할 수 없음
    그러면 깃은 내부적으로 어떻게 동작하냐 하면
    1. 마스터와 이슈53의 공통의 조상을 찾음.
    2. 3way merge라고 하는 내부적 방법을 이용하여 머지를 함.
    3. 두개를 합쳤다라고 알려주고 두개를 합쳤다라고 하는 별도의 커밋을 만듬(자동으로)
    그래서 차이점은? > 커밋을 생성(Fast-forward)하지 않고 생성하고 임('recursive' strategy)
    이 아티클은 그런 이야기를 담고 있음.
  2. 문서만 보고 하려 했으면 한참 걸릴 수도 있었는데 설명을 듣고서는 쉽게 진행할 수 있었습니다. 감사합니다.
버전 관리
egoing
현재 버전
선택 버전
graphittie 자세히 보기