Git&Github

브랜치(branch)(ⅱ)

코드마 2020. 3. 12. 17:53

이전 글에 이어서 브랜치에 관해 정리하고자 한다.

이번에는 브랜치들 끼리 커밋했을 때 어떻게 되는지 알아보자.

 

 이전에 samsung 브랜치로 체크아웃 한뒤부터 이어서 한다.

 

test.txt파일에 content4를 입력하고 저장하자.

그리고 새로운 문서 samsung.txt파일도 만들고 content4를 입력해서 저장한 후 커밋하자.

커밋 메시지는 test 4로 하였다.

이때 두 파일을 한번에 스테이징 하려면 git add .을 입력하면 된다.( add 뒤에 마침표(.))

 

이제 커밋이 어떻게 저장되었는지 확인해보자.

각 브랜치에 대해 다 알고싶을땐 '--branches'를 추가하면 된다.

이렇게 보면 이제 어떤 브랜치에 어떤 커밋이 최신인지 알 수 있다.

ms, google의 최신 커밋은 test 3 

master 최신 커밋은 test 4 

samsung 브랜치는 samsung test 4 

 

이제 이걸 더 간편하게 보기 위해 그래프 옵션을 추가해보자.

옆에 빨간 수직선이 커밋관계를 나타낸다.

예) samsung 브랜치를 보면 test 3 커밋 다음에 samsung test 4 커밋이 만들어졌음을 알수있다.

 

브랜치들만의 차이점을 알아보려면 'git log master..samsung' 이처럼

중간에 마침표 두개(..) 를 넣으면 된다.

master 브랜치에는 없고 samsung 브랜치에만 있는 커밋을 보여준다.

(반대로 하면 master 브랜치에만 있는 커밋을 보여줌)

 

 

---------------------------------------------------------------------------------------------------------------------

 

 

이제 브랜치를 나누는 법을 알았다면, 병합하는 방법도 알아보자.

 

새로운 저장소에서 이 실습을 진행해본다.

manual2를 만들고 저장소로 만들어보자

(만일 이전에 실습에서 이어서 한다면 cd ~ 를 먼저 입력한다.)

'git init manual2'

'cd manual2'

'ls -la'

(mkdir명령어를 사용하지 않아도 깃 저장소를 만들 수 있다.)

 

여기서 test.txt 파일을 만들고 1이라는 내용을 입력 후 저장하자.

 

그리고 test 1이라는 커밋 메시지와 함께 커밋한다.

이제 브랜치를 하나 만들자. (master는 원래 이미 만들어져 있음)

samsung으로 똑같이 만들었다.

 

이제 master 브랜치에 master.txt 파일을 만들고 master test 2 라는 메시지와 함께 커밋한다.

(내용은 master2라고 하였다.)

이제 samsung 브랜치로 체크아웃하고 

samsung.txt 파일을 만든 후 samsung 2 내용을 저장하고 samsung test 2 로 커밋하자.

(방법은 위와 같다.)

 

'git log --online --branches --graph'

로 확인해보자

이제 저번처럼 나뉘어진 상태가 되었다. 이걸 합쳐보자.

 

다시 마스터 브랜치로 체크아웃 한다.

'git checkout master'

이후 병합 명령어

'git merge (브랜치이름)'

을 입력한다.

(이전에 vim이 실행될텐데 커밋 메시지를 수정할 수도 있다.

여기서는 그냥 esc를 누르고 :wq 로 저장후 종료하자.)

 

'ls -al'

명령어를 사용해보면 samsung.txt 파일이 master 브랜치에 합쳐져있다.

이제 어떻게 병합되었는지

git log --oneline...으로 확인해보자

보이는 것처럼 병합이 잘 되었음을 알 수 있다.

(Merge branch 'samsung' 이라는 커밋이 새로 생겼다.)

 

---------------------------------------------------------------------------------------------------------------------

 

이제 다른 저장소를 만들어서 같은 문서를 수정했을 때 벌어지는 일을 알아보자.

 

cd ~

'git init manual3'

'cd manual3'

 

이후 빔으로 test.txt 파일을 만들고 그안에 다음과 같이 내용을 만든다.

그리고 이어서 커밋을 진행하자.

메시지는 test 1으로 했다.

 

이제 master 브랜치는 test 1 을 가리키고 있을 것이다.

 

이제 새로운 브랜치 sub를 만들자.

'git branch sub'

 

그 후 우선 master 브랜치에서 다음과 같이 수정한다.

이후 수정한 test.txt 파일을 커밋한다.

다음처럼 브랜치 sub 로 체크아웃한뒤 두번째 위치에 test content를 입력 후 커밋한다.

 

그다음 master 브랜치로 체크아웃한뒤에 병합명령어

'git merge sub' 를 입력한다.

편집기는 :wq 로 종료하자.

이제 test.txt 파일을 cat 명령어로 확인해보자.

이처럼 잘 병합됨을 확인할 수 있다.

 

여기서 의문 : "그럼 같은 문서에 같은 위치를 수정하면 어떻게 되나??"

 

A) 그럼 conflict가 발생해 병합이 제대로 일어나지 않는다.

따라서 직접 test.txt 파일을 열어서 충돌되는 문자를 수정한 뒤에

다시 commit을 진행하면 된다.

 

 

---------------------------------------------------------------------------------------------------------------------

 

간단하게 브랜치 삭제하는 방법.

'git branch -d (삭제할 브랜치 이름)'

단, 다시 같은 이름의 브랜치를 만들면 예전의 내용을 다시 볼 수 있다.