그냥 하는 노트와 메모장

Branch (Ongoing) 본문

Git bash

Branch (Ongoing)

coloredrabbit 2018. 5. 3. 16:57

* Branch


참고 URL - https://git-scm.com/book/ko/v2/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EB%B8%8C%EB%9E%9C%EC%B9%98%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80



Git은 데이터를 일련의 스냅샷으로 기록한다.

커밋하면 Git은 현 Staging Area에 있는 데이터의 스냅샷에 대한 포인터, 저자나 커밋 메시지 같은 메타 데이터, 이전 커밋에 대한 포인터 들을 포함하는 커밋 개체(커밋 Object)를 저장한다. 이전 커밋 포인터가 있어서 현재 커밋이 무엇을 기준으로 바뀌었는지를 알 수 있다. 최초 커밋을 제외한 나머지 커밋은 이전 커밋 포인터가 적어도 하나씩 있고 브랜치를 합친 Merge 커밋 같은 경우에는 이전 커밋 포인터가 여러개 있다.


  * checkout 명령어

현재 작업할 브랜치를 이동할 때 사용한다.

$git checkout "branch_name"

옵션 -b를 넣어주면 브랜치가 없는 경우 브랜치를 만든 다음 브랜치를 이동한다.


현재 작업중인 브랜치는 HEAD가 가리킨다.

브랜치를 생성하게 되면 새로 생긴 브랜치는 마지막에 커밋했던 데이터를 가리키게 된다.



=====================================================================================


* Merge 기초

  두 개 이상의 brach

참고 URL - https://git-scm.com/book/ko/v2/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EB%B8%8C%EB%9E%9C%EC%B9%98%EC%99%80-Merge-%EC%9D%98-%EA%B8%B0%EC%B4%88


Fast-forward의 경우 갈라진 브랜치가 하나일 때, 단순 포인터를 이동시킨다는 의미.

이는 곧 합칠 브랜치의 최신 커밋 객체를 가리키도록 한다.


$git merge "branch_name"

-> checkout으로 브랜치를 이동한다음 합칠 브랜치 명을 입력하여 merge하면 된다.


합칠 때 두 이전 커밋 객체가 다를 경우, 공통 조상을 이용하여 3-way merge를 한다.

(공통 조상 : Lowest Common Ancestor)

이런식으로 만들어진 커밋 개체의 부모는 여러 개이고, Merge 커밋이라고 부른다.


보통 merge를하고 나서 필요 없는 브랜치는 삭제한다.

$git branch -d "branch_name"



* 충돌의 기초(Conflict)

  가끔씩 3-way Merge가 실패할 때도 있다. Merge 하는 두 브랜치에서 같은 파일의 한 부분을 동시에 수정하고 Merge하면 Git은 해당 부분을 Merge 하지 못한다.


===================================================================

$ git merge iss53

Auto-merging index.html

CONFLICT (content): Merge conflict in index.html

Automatic merge failed; fix conflicts and then commit the result.

===================================================================


  Git은 자동으로 Merge 하지 못해서 새 커밋이 생기지 않는다. 변경사항의 충돌을 개발자가 해결하지 않는 한 Merge 과정을 진행할 수 없다. Merge 충돌이 일어났을 때, Git이 어떤 파일이 Merge 할 수 없었는지 살펴보려면 git status 명령을 이용한다.

충돌이 일어난 파일은 unmerged 상태로 표시된다. Git은 충돌이 난 부분을 표준 형식에 따라 표시해준다. 그러면 개발자는 해당 부분을 수동으로 해결한다.


또는 Merge 도구도 충돌을 해결할 수 있다. git mergetool 명령으로 실행한다.



'Git bash' 카테고리의 다른 글

git term (Ongoing)  (0) 2018.04.17
git reset  (0) 2018.04.17
git commit  (0) 2018.04.17
git diff/ difftool  (0) 2018.04.17
git rm  (0) 2018.04.17
Comments