Machineboy空

Git&GitHub 입문 : 3장 Git과 브랜치 본문

Computer/개념

Git&GitHub 입문 : 3장 Git과 브랜치

안녕도라 2024. 7. 19. 12:03

원래 버전에 새로운 기능을 추가했을 때 오류 없이 완벽하게 동작한다는 보장이 없다면 어떻게 해야할까?

제대로 동작하는 소스는 그대로 둔 채 새 소스를 추가한 버전을 따로 만들어 관리하고 완벽하게 완성한 다음 원래 소스에 더할 수 있다면 편리할 것.

 

1) 브랜치란?

브랜치(branch) : 나무에서 가지가 새 줄기를 뻗듯이 여러 갈래로 퍼지는 데이터 흐름을 가리키는 말로 사용합니다.

 

분기(branch)한다. 병합(merge)한다.


2) 브랜치 만들기

// 새 브랜치 만들기
git branch 브랜치명

// 브랜치 사이 이동하기
git checkout

// 커밋내용 한 줄로 확인
git log --oneline

 


3) 브랜치 정보 확인하기

// 한번에 스테이지 올리기
git add .

//각 브랜치 최근 커밋 보기
git log --oneline --branches

//그래프 형태로 보기
git log --oneline --branches --gragh

//브랜치 사이 차이점 알아보기
git log main..apple		: main에는 없고 apple에만 있는 커밋
git log apple..main		: apple에는 없고 main에만 있는 커밋

4) 브랜치 병합하기

만들어진 각 브랜치에서 작업하다가 어느 시점에서는 기존 브랜치와 합쳐야 한다.

// main 브랜치로 이동!
git checkout main

// 브랜치 병합
git merge o2

// 브랜치 지우기
git branch -d o2

 

* 3 way merge란?

 

프로젝트의 규모가 클수록 브랜치가 많으므로 브랜치에서 병합해야 할 파일도 많아집니다. 그만큼 충돌이 많이 생길텐데, 깃의 브랜치 병합을 자동으로 처리해주고 충돌을 해결해주는 프로그램이 많다. 병합 알고리즘에는 2 way merge와 3 way merge가 있는데 후자가 훨씬 효율적이므로 이를 지원하는 프로그램을 선택하는 것이 좋다.

(P4Merge, Meld, Kdiff3, Araxis Merge 등)

 

https://wonyong-jang.github.io/git/2021/02/05/Github-Merge.html

 

* 빨리 감기 병합(fast-forward merge)

 

master 브랜치에서 브랜치를 분기한 후에 master 브랜치에 아무 변화가 없다면 (새로운 커밋을 만들지 않았다면) 분기한 브랜치를 병합하는 것은 간단하다. 분기한 브랜치에서 만든 최신 커밋을 master 브랜치가 가리키게만 하면 되기 때문이지요. 이 경우에는 화면에 커밋 해시가 업데이트되었다는 내용과 함께 fast-forwrd라는 메시지가 나타납니다. 이런 병합을 빨리 감기 병합(fast-forward merge)이라고 부릅니다. git merge 명령의 결과가 단순히 포인터를 움직인 것이기 때문에 따로 커밋 메시지 창은 열리지 않습니다.

 

* 각 브랜치들이 가리키는 것이 무엇인지?

 


5) 브랜치 관리하기

//커밋하지 않은 수정 내용을 어딘가에 보관하려면!
git stash

//stash 목록에서 가장 최근 항목을 되돌린다.
git stash pop

//stash 목록에서 저장된 수정 내용을 나중에 또 사용할지도 모른다면
git stash apply

//stash 목록에서 가장 최근 항목을 삭제
git stash drop

 

git branch fixed 새로운 브랜치 fixed를 만듭니다.
git checkout fixed fixed 브랜치로 체크아웃합니다.
git log --oneline 커밋 로그에서 한 줄에 한 커밋씩 표시합니다.
git add . 수정한 전체 파일을 스테이지에 올립니다.
git log --branches --graph 커밋 로그에 각 브랜치의 커밋을 그래프로 표시합니다.
git merge fixed fixed 브랜치를 master 브랜치에 병합합니다.
cat edit.txt 터미널 창에서 edit.txt 내용을 확인합니다.
git init doit doit 디렉터리를 만드는 동시에 지역 저장소로 만듭니다.
git reset 커밋해시 현재 커밋을 다른 브랜치에 있는 c1 커밋으로 되돌립니다.
git branch -d fixed 병합이 끝난 fixed 브랜치를 삭제합니다.
git stash 또는 git stash save 작업 트리의 수정 내용을 따로 보관해서 감춥니다.
git stash pop 따로 보관했던 수정 내용을 꺼내옵니다.