반응형
merge를 할때 충돌이 일어나는 경우도 있다. 이런경우에 대한 학습을 해보도록하자.
git merge 는 기본적으로 각각의 브랜치가 가지고 있는 파일이 다를 경우 merge를 함과 동시에 해당 브랜치에 있는 모든 파일이 다 병합된다.
문제는 만약 같은 파일을 다른 브랜치에서 수정했을 때 발생한다.
#먼저 지금 현재 내가 가지고 있는 브랜치 리스트를 체크한다.
% git branch
* exp
master
#exp 브랜치 아래에 aaa.txt 라는 파일을 만들고 내용을 넣어서 저장한다.
% vi aaa.txt
#저장 후 commit
% git add aaa.txt
% git commit -m "exp:1"
[exp 841c3f7] exp:1
1 file changed, 2 insertions(+)
create mode 100644 aaa.txt
#master 브랜치로 체크아웃 ~
% git checkout master
Switched to branch 'master'
#exp 와 master 의 병합
% git merge exp
Updating c8d9975..841c3f7
Fast-forward
aaa.txt | 2 ++
1 file changed, 2 insertions(+)
create mode 100644 aaa.txt
#마스터 브랜치가 aaa.txt 파일을 가진것을 볼 수 있다.
% ls -al
total 104
drwxr-xr-x 14 alice staff 448 19 Nov 13:16 .
drwx------@ 9 alice staff 288 16 Nov 16:24 ..
-rw-r--r--@ 1 alice staff 6148 16 Nov 13:27 .DS_Store
drwxr-xr-x 13 alice staff 416 19 Nov 13:16 .git
-rw-r--r-- 1 alice staff 8 19 Nov 13:16 aaa.txt
이제 각각의 브랜치에서 aaa.txt 파일을 다른 내용으로 수정한다.
#master 브랜치에 있는 aaa.txt 파일수정 -> git add -> git commit
% git checkout master
% vim aaa.txt
% git add aaa.txt
% git commit -am "master:1"
[master 97241d3] master:1
1 file changed, 2 insertions(+)
#exp 로 브랜치 바꾸고 aaa.txt파일을 master와 다르게 수정 -> git add -> git commit
% git checkout exp
Switched to branch 'exp'
% vim aaa.txt
% git add aaa.txt
% git commit -am "exp:2"
[exp 99243bc] exp:2
1 file changed, 2 insertions(+), 2 deletions(-)
#master 로 체크아웃
% git checkout master
Switched to branch 'master'
#exp 파일과 병합
% git merge exp
Auto-merging aaa.txt
CONFLICT (content): Merge conflict in aaa.txt
Automatic merge failed; fix conflicts and then commit the result.
master에 있는 파일 내용을 보자.
<<<<<<<< HEAD 의 내용은 현재 내가 체크아웃하고 있는 브랜치의 파일내용을 보여준다
>>>>>>>> exp 의 내용은 exp 브랜치 파일 내용을 보여준다.
% cat aaa.txt
<<<<<<< HEAD
aaa
bbb
ccc
1234
=======
1234
fghj
>>>>>>> exp
git status 를 보면
% git status
On branch master
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: aaa.txt
이 때 개발자가 직접 수정해 주어야 한다.
% git checkout master
#ccc 다음에 123을 추가해줌
% vi aaa.txt
aaa
bbb
ccc 123
% git add aaa.txt
% git commit -am "master:2"
[master 324eae6] master:2
% git checkout exp
Switched to branch 'exp'
% git merge master
Updating 99243bc..324eae6
Fast-forward
aaa.txt | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
% cat aaa.txt
aaa
bbb
ccc 123
aaa.txt 파일이 exp 브랜치의 파일과 잘 병합된 것을 확인 할 수 있다.
더 자세한 내용을 원한다면 git-scm.com/book/ko/v2/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EB%B8%8C%EB%9E%9C%EC%B9%98%EC%99%80-Merge-%EC%9D%98-%EA%B8%B0%EC%B4%88
이 링크의 "충돌의 기초" 부분을 읽어보길 바란다.
내용이 도움이 되셨다면 블로그 구독하기 부탁드리겠습니다.
* 이 글의 모든 저작권은 aliceintr에 있으며 무단 배포 및 사용은 자제해 주시기 바랍니다. *
반응형
'DevOps > GIT' 카테고리의 다른 글
github#8 git stash (0) | 2020.11.20 |
---|---|
github#7 3 ways merge (0) | 2020.11.20 |
github#5 git HEAD file (0) | 2020.11.20 |
github#4 branch (0) | 2020.11.17 |
github#3 gistory and git rm (0) | 2020.11.16 |