GIT #3

김종하·2021년 10월 4일
0

브랜치(Branch)

Master Branch

가장 기본적으로 사용되는 브랜치로, 별도로 브랜치를 만들지 않으면 master branch
한 줄기에서 계속 commit 이 발생하게 된다.

일반적으로 master branch 에는 기능이 검증되고 문제가 없어 제품에 포함이되어도 되는
내용들만 포함되어져 있다.

만약 새로운 기능을 개발하고자 한다면 master branch 에서 작업하는게 아니라
기능 개발을 위한 브랜치를 만들어서 작업을 commit 해나가다 기능을 완성하고 검증되면
master branch 에 merge 하는 형식으로 개발을 진행하면 된다.

'브랜치' 를 사용함으로써 제품은 항상 운영가능한 상태로 유지하면서 동시에 여러 개발자가
각각의 기능을 개발하기 위해 브랜치를 하나씩 따서 작업을 함으로써 협업이 원활히 될 수 있도록 한다.

git merge

fast-forward merge

Fast forward merge 는 master 브랜치에서 새로운 branch 를 생성한 후(작업한 후) master branch 에 변동사항이 없다면 merge 할 때 단순히 master branch 가 가리키고 있는 포인터를 새로운 branch 의 끝으로 이동한 후 새로운 브랜치를 삭제하면 된다.

master : C1 - C2 - C3(master)
		    ㄴ N1 - N2(another-branch) 
            
------- fast forward merge --------- 

master : C1 - C2 - C3 
	    	    ㄴ N1 - N2(master)

=> fast-forward 의 경우 merge 가 되었다는 commit 은 history 에 남지 않는다.
=> 만약 history 를 남기고 싶다면 git merge --no-ff {merge할 브랜치명} 을 사용하면 된다.

Three-way merge

master 브랜치에서 새로운 branch 를 생성한 후(작업한 후) master branch 에 변동사항이 있다면 Three-way merge 를 하게 된다.

rebase

master : C1 - C2 - C3 - C4 - C5 (master)
		    ㄴ N1 - N2(another-branch) 
            
-----rebase----- 

master : C1 - C2 - C3 - C4 - C5 (master)
	    	              ㄴ N1 - N2(another-branch)

혼자서 another-branch 에서 작업을 하고 있는 상황이라면 rebase 를 해도 상관이 없겠지만
another-branch 에서 협업중이라면 유의해야 한다.
위 그림에서 처럼 N1 - N2 커밋의 포인터 정보만 단순히 변경된 것이 아니라 다른 N1 - N2 커밋이 생기기 때문에 추후에 merge conflic 가 발생할 수 있다.
이미 remote 업로드된 history 가 있다면 rebase 사용을 하지 말아야한다.

관련 명령어

git branch -> 브랜치들을 보여준다.
git branch -all -> 서버(remote)에 있는 모든 브랜치들을 보여준다.
git branch [브랜치명] -> [브랜치명] 의 브랜치를 생성한다. 
git switch [브랜치명] -> [브랜치명] 으로 이동한다. (=git checkout [브랜치명])
git switch -c [브랜치명] -> [브랜치명] 을 생성한 후 해당 브랜치로 이동 (=git checkout -b [브랜치명])
git branch -d [브랜치명] -> [브랜치명] 의 브랜치 삭제 
git branch --move [기존브랜치명] [변경브랜치명] -> [기존브랜치명]을 [변경브랜치명]으로 변경 
git merge [브랜치명] -> 현재브랜치에 [브랜치명]브랜치를 merge 한다. 

0개의 댓글