처음부터 차근차근

Branch 본문

Git

Branch

_soyoung 2021. 9. 24. 00:21
반응형
branch란

 

branch

git에는 현재 작업하고 있는 곳에서 분기하여 다른 작업을 할 수 있는 기능이 있다.

이 기능을 branch라고 한다.

 

branch를 번역하면 나뭇가지이다.

branch를 만드는 것은 나뭇가지를 하나 생성하는 것이고, 그 나뭇가지가 옆으로 뻗어나간다고 생각하면 편하다.

 

branch를 사용하면 현재 작업에서 무언가를 추가하거나 뺀 버전을 만들고, 필요없다 싶으면 다시 돌아올 수 있다.

또, 만들다가 원래 작업에다 합치고 싶으면 다시 합칠 수 도 있다.

이러한 branch기능을 사용하면 쉽고 빠르게 여러 버전을 만들 수 있어서 참 편리하다.

 

 

 

현재 branch 보기
git branch

 

 

 

branch 만들기
git branch 브랜치명

 

+ branch 만들면서 checkout까지 같이 하기

git checkout -b 새브랜치명



 

branch 변경하기
git checkout 변경할브랜치

호텔에서 나갈 때 checkout을 한다.

그것처럼 현재 브랜치에서 checkout하고(나가고) 다른 브랜치로 간다고 생각하면 편하다.

 

 

 

모든 branch commit 보기 
git log --branches --decorate

--branches : 내 branch + 다른 branch log 보기

--decorate : commit 옆에 branch 정보 나오게 하기

+ 여기서 HEAD가 가리키는 것은 현재 branch이다.

 

 

 

모든 branch commit을 그래프로 보기
git log --branches --decorate --graph

+ 더 간단하게 보기

git log --branches --decorate --graph --oneline

 

 

 

두 branch의 log 차이 보기
git log 브랜치1..브랜치2

브랜치1에는 없고, 브랜치2에는 있는 log가 나온다.

master branch에는 없고, myBranch에는 있는 log(commit)가 나왔다.

 

log내용 차이까지 보기

git log -p 브랜치1..브랜치2

--- : 명령 위치 기준으로 앞에 있는 브랜치1을 뜻함

+++ : 명령 위치 기준으로 뒤에 있는 브랜치2를 뜻함

master branch에서는 third.txt의 내용이 third txt haha이고, myBranch에서는 third.txt의 내용이 third txt haha!!!이다.

 

 

 

각 branch의 현재 다른 점 보기
git diff 브랜치1..브랜치2

브랜치1과 브랜치2의 현재 상태의 차이점을 보여준다.

master branch의 first.txt의 내용은 first txt이고, myBranch branch의 first.txt의 내용은 first이다. master은 second.txt, third.txt를 가지고 있지 않고, myBranch는 가지고 있다. 

 

 

 

branch 병합(merge)

 

간혹 branch1의 내용을 branch2에도 가지게 하고 싶을 때가 있는데 이 때 사용하는 방법이 병합(merge)이다.

 

병합(merge)이란, 한 branch를 다른 branch에다 합치는 것을 말한다. 

이 때 두 개의 branch를 합친다고 해서 내용이 완전히 같은 하나의 branch가 되는게 아니다.

예를 들어 branch1에 branch2를 merge한다고 가정해보자.

branch1에 branch2를 merge한다면 branch2의 내용은 그대로이고, branch1의 내용만 'branch2 내용 + branch1 내용'으로 변한다.

만약 branch2도 branch1의 기능을 가지게하고 싶으면 따로 branch2에다가 branch1을 merge해야 한다.

 

주의할 점(헷갈림)

병합을 할 때 branch1에 branch2를 병합하는 것(방법1)과

branch2에 branch1을 병합하는 것(방법2)은 완전히 다른 것이다.

 

방법1을 하려면 branch1로 checkout을 한 후 branch2를 merge해야하고,

방법2를 하려면 branch2로 checkout을 한 뒤 branch1을 merge해야한다.

 

branch를 다룬지 얼마 안되면 이 두 개가 엄청 헷갈리는데, 필자의 경우 이렇게 생각하면 편했다.

branch를 merge하는 일은 '현재 branch에서 다른 branch를 가져와서 병합하는 것'만 가능하다.

기준이 현재 branch(현재 checkout한 브랜치)에 있고, 거기에서 다른 branch를 가져와서 병합하는 것만 가능하다는 말이다.

만약에 branch1에 branch2를 merge한다고 하면 branch1에 checkout을 하고(기준으로 잡고), branch2를 병합(가져옴)한다.

이렇게 생각해서 더는 헷갈리지 않게되었다.

 

 

 

병합(merge)하기
git merge 병합할브랜치

merge명령어를 치면 vim편집기에서 자동으로 저 commit 메세지를 작성해준다. 그냥 저상태에서 :wq한다.
master branch에 myBranch branch merge한 결과
+ myBranch를 master에 merge

 

 

 

branch 삭제
git branch -d 삭제할브랜치

myBranch 삭제

주의 : 삭제할 브랜치에 있으면(checkout) 안된다. 

 

 

 

 

branch 원격저장소에 올리기

git push origin 브랜치명

 

 

 

 

참고 : '지옥에서 온 git - 생활코딩' 변형 및 요약

반응형

'Git' 카테고리의 다른 글

git add 원리  (0) 2021.09.29
gistroy 설치  (0) 2021.09.28
Fast-Forward와 stash  (0) 2021.09.27
Git 기본 정리  (0) 2021.09.21
Git 시작(git 설치 ~ git 초기화)  (0) 2021.09.20
Comments