반응형

(github)깃허브 - 깃(git) 사용법4 브랜치 병합하기

 

이전 포스팅에서는 브랜치를 만들고 이동하는 방법에 대해서 포스팅하였습니다.이번 포스팅에서는 브랜치를 마스터로 병합하는 방법에 대해서 포스팅하겠습니다.

 

서로 다른 파일 병합하기

먼저 이전에 만들었던 내용을 모두 삭제하고 git_test폴더에서 git init을 실행합니다.

 

git_test 폴더에 master.txt 파일을 만들고 1열에 "master AAA"를 입력 및 저장합니다.

 

이제 git add master.txt 명령어와 git commit -m "master AAA" 명령어를 입력하여 커밋을 만듭니다.

 

다음은 sub라는 브랜치를 만듭니다. 명령어는 git branch sub 입니다.

 

git log를 해보면 현재 master, sub 브랜치 모두 첫번째 커밋한 "master AAA" 메세지를 가리키고 있는것을 확인 할 수 있습니다.

 

이제 git_test 폴더에 master2.txt 파일을 만들고 1열에 "master2 BBB"를 입력 및 저장합니다.

 

git add master2.txt 명령어와 git commit -m "master2 BBB" 명령어로 2번째 커밋을 만들어 주고 git log를 확인합니다. 그럼 HEAD가 마스터를 가르키고 있고 마스터는 최신 커밋인 master2 BBB에 있습니다.

 

이제 git checkout sub 명령어로 sub 브랜치로 이동합니다. 그러면 HEAD는 sub 브랜치를 가르키고 sub 브랜치는 master AAA 메세지로 커밋한 곳에 있습니다. 또한 git_test 폴더를 보면 master2.txt 파일이 사라진것을 확인 할 수 있습니다.

git_test 폴더에 sub.txt 파일을 만들고 1열에 "sub AAA"를 입력하고 저장합니다.

 

그다음 git add sub.txt 명령어와 git commit -m "sub AAA" 명령어를 입력하여 커밋을 만들어줍니다. 그리고 git log --oneline --branches --graph 명령어로 브랜치들의 로그를 확인합니다.

 

위 사진에서 보듯이 master2 BBB와 sub AAA는 master AAA라는 같은 부모에서 분기된 것을 확인 할 수 있습니다. 이제 분기된 두 브랜치를 합치도록 하겠습니다.

 

git checkout master 명령어를 입력하여 마스터 브랜치로 이동합니다.

이동 후 git_test 폴더를 보면 sub.txt파일은 사라지고 master2.txt 파일이 다시 살아난 것을 확인 할 수 있습니다.

 

이제 git merge sub 명령어를 입력하면 sub 브랜치를 master로 병합하게 됩니다.

git log로 확인해보면 두개의 브런치가 최신 커밋으로 합쳐진것을 확인 할 수 있습니다.

git_test 폴더를 확인해보면 sub.txt 살아난 것을 확인 할 수 있습니다.

 

git merge를 할때 에디터를 열어 머지 메세지를 수정하고 싶다면 --edit 옵션을 명령어와 함께 적어주면 됩니다.

반대로 기본값으로 머지 시 자동으로 편집기가 뜨는 경우 --no-edit 옵션을 명렁어와 함께 적어주면 메세지를 수정하지 않고 바로 머지가 됩니다.

 

 

같은 문서의 다른 빈라인을 수정했을 때 병합하기

이번에는 하나의 파일에서 1열은 master가 수정하고, 2열은 sub가 수정했을때 두 브랜치를 합치는 방법에 대해서 설명하겠습니다.

 

먼저 git_test 폴더에 모든 파일을 삭제하고 git init을 실행합니다.(초기화)

 

git_test 폴더에 master.txt 파일을 생성하고 1, 3, 5열에 아래와 같이 master, sub, end를 입력 후 저장합니다.

 

git add master.txt 명령어와 git commit -m "master / sub / end" 명령어를 입력해서 첫 커밋을 만들어 줍니다.

 

다음은 git branch sub 명령어로 sub 브랜치를 만들어 줍니다. (HEAD는 마스터인 상태)

 

이제 git_test 폴더에 master.txt 파일을 열고 2열에 "AAA"를 입력 및 저장합니다.

그리고 git commit -am "master AAA / sub / end"로 커밋합니다.

 

다음은 git checkout sub 명령어로 sub 브랜치로 이동합니다. 

이동 후 master.txt를 열어보면 처음에 커밋한것 처럼 1, 3열에 master, sub가 존재합니다.

 

이제 master.txt 파일의 4열을 "BBB"로 입력 후 저장합니다.

그리고 git commit -am "master / sub BBB / end"로 커밋을 만들어 줍니다.

 

이제 git checkout master 명령어로 마스터 브랜치로 이동합나다.

그리고 git merge sub 명령어로 두 브랜치를 합칩니다. git log로 확인해보면 두 브런치가 하나로 합쳐진 것을 확인할 수 있습니다.

maste.txt 파일을 열어보면 2, 4열에 AAA, BBB가 모두 입력되어 있는것도 확인 할 수 있습니다.

 

 

같은 문서의 같은 위치를 수정했을 때 병합시 발생하는 충돌 해결하기

먼저 git_test 폴더에 모든 파일을 삭제하고 git init을 실행합니다.(초기화)

 

master.txt 파일을 생성하고 1열에 "maste_"를 입력 저장합니다.

 

git add master.txt 명령어와 git commit -m "master_" 명령어로 첫 커밋을 만듭니다.

 

git branch sub 명령어로 sub 브랜치를 반들어 줍니다.

 

master.txt 파일 1열을 "master_master2_"로 수정 저장합니다.

그리고 git commit -am "master_master2_" 명령어로 커밋을 만들어 줍니다.

 

이제 git checkout sub 명령어로 sub 브랜치로 이동합니다.

 

그리고 master.txt 파일을 열고 1열을 "master_sub"로 수정 저장합니다.

이후 git commit -am "master_sub" 명령어로 sub 브랜치의 커밋을 만들어 줍니다.

 

git checkout master 명령어로 다시 마스터 브랜치로 이동합니다.

 

그리고 git merge sub 명령어로 병합을 시도하면 충돌이 일어 납니다.

 

master.txt 파일을 열어 보면 아래와 같이 충돌 내용을 나눠서 적혀있습니다.

 

<<<HEAD부터 ===사이의 내용은 현재 브랜치에서 수정한 내용입니다.(master_master2_)

===부터 >>>sub 사이의 내용은 병합할 브랜치에서 수정한 내용입니다.(master_sub)

 

이제 충돌난 병합인 master.txt 파일을 열어 원하는 내용으로 직접 수정 저장합니다.

 

그리고 git commit -am "master_master2_sub" 명령어로 커밋을 합니다.

그리고 git log --oneline --branches --graph 명령어로 브랜치와 커밋 관계를 확인합니다.

 

병합이 끝난 브랜치 삭제방법

위에서 만들었던 브랜치를 활용해서 sub를 삭제해보겠습니다.

 

먼저 브랜치를 삭제하기 전에 반드시 git checkout master 명령어로 마스터 브랜치로 이동을 해야합니다.

그리고 git branch -d sub 명령어로 sub 브랜치를 삭제합니다.

(만약 마스터로 병합되지 않은 브랜치를 삭제하려는 경우는 오류가 납니다. 이럴 경우는 -d 대신 -D 옵션을 사용하면 강제로 브랜치를 삭제할 수 있습니다.)

 

기존파일 수정중 기존파일을 제외한 새로운 파일만 커밋하고 싶을때

이번에는 git stash에 대해서 설명하겠습니다.

만약 제가 test1.txt 파일을 커밋 후 이어서 수정을 하고 있던 도중, 갑자기 test2.txt를 추가해서 커밋을 하나더 만들어야 할 경우가 있다고 가정해보겠습니다.

하지만 저는 text1.txt 파일의 수정이 완료되지 않아 text1.txt 파일은 커밋에서 제외하고 싶고 새로운 파일 test2.txt 파일만 커밋을 하고 싶은 상황입니다. 이럴때 사용하는 명령어가 git stash 입니다.

 

먼저 git_test 폴더에 모든 파일을 삭제하고 git init을 실행합니다.(초기화)

 

그리고 st라는 저장소(폴더)를 만들기 위해서 git init st 명령어도 실행합니다.

 

이제 test1.txt 파일을 만들고 1열에 "AAA"를 입력하고 저장합니다.

git add test1.txt 명령어와 git commit -m "test1 AAA" 명령어로 커밋까지 완료합니다.

 

이제 test1.txt 파일 2열에 "BBB"를 입력하고 저장합니다.(add와 commit은 하지 않습니다.)

그리고 git status 로 상태를 확인합니다. test1.txt의 변화가 있음을 확인합니다.

 

이제 test2.txt 파일을 생성하고 1열에 "111"을 입력 및 저장합니다.

그리고 git status를 확인하면 test2.txt 파일은 Untracked 쪽에 있는 것을 확인합니다.

 

이제 test1.txt 파일은 빼고 test2.txt만 커밋해보도록 하겠습니다.

먼저 git stash 명령으로 현재 상태를 임시 저장합니다. (단, Untracked 쪽 파일은 저장이 안됩니다.)

그리고 다시 git status 명령어를 입력하면 기존에 수정됐다고 표시됐던 test1.txt 파일이 안보입니다.

 

그리고 test1.txt 파일을 열어보면 수정중이던 내용이 첫 커밋 상태로 돌아간 것을 확인할 수 있습니다.

 

이제 test2.txt 파일을 커밋하기 위해 git add test2.txt 명령어와 git commit -m " test2 111" 명령어를 입력합니다.

test1.txt, test2.txt 파일을 열어보면 아래와 같은 값이 입력되어진 상태입니다.

 

test2.txt 커밋전에 stash로 저장했던 내용을 확인하는 명령이 git stash list 입니다. 입력합니다.

저장된 내용을 꺼내는 명령어는 git stash pop 입니다. 입력합니다.

(stash 저장과 꺼내기는 스택구조입니다. 후입선출)

그러면 test1.txt 파일이 수정중이라는 메세지와 함께 test1.txt 파일의 내용 또한 저장했을 때 내용으로 복구됩니다.

 

위에서 설명드린 명령어 중 git stash pop은 저장된 stash 리스트를 후입선출로 삭제와 함께 꺼내옵니다.

만약 삭제 없이 꺼내오고 싶다면 git stash apply 명령어로 꺼내오면 stash 리스트에 저장 내용이 남아있습니다.

그리고 리스트의 내용을 삭제하고 싶다면 git stash drop 명령어로 삭제가 가능합니다. 삭제는 가장 최근 항목부터 삭제 됩니다.(스택구조)

 

 

[github]깃허브 전체보기

 

'(github)깃허브' 카테고리의 글 목록

전산 관련 경험을 기록 하는 곳

reddb.tistory.com

 

반응형