브랜치(branch)(ⅱ)
이전 글에 이어서 브랜치에 관해 정리하고자 한다.
이번에는 브랜치들 끼리 커밋했을 때 어떻게 되는지 알아보자.
이전에 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 (삭제할 브랜치 이름)'
단, 다시 같은 이름의 브랜치를 만들면 예전의 내용을 다시 볼 수 있다.