다양한 브랜치에서 동시에 작업을 하고 remote repository 에 push 를 한다면 충돌은 피할 수 없을 것이다.
이럴 때 해결할 수 있는 방법 중 하나에 대해서 알아본다.
앞에 글은 web browser을 이용한 merge 였다면 이번에는 cmd line을 이용해 해결해 보자
[IT/DevOps] - github#17 git pull request 충돌 & web editor 해결
먼저 충돌이 될 상황을 만들어 준다.
가정
- [feature4] Branch에서 text1.txt 파일을 수정하고 있는데 이와 동시에 [master] Branch에서 동일한 파일을 수정하고 있다. 같은 라인을 수정하고 있다고 가정하자.
- [feature4] 가 remote repository로 push
- [master] 가 remote repository로 push
- 원본파일
feature4 의 상황
% git checkout -b feature4
Switched to a new branch 'feature4'
% git add text1.txt
% git commit -am "First commit by feature4"
[feature4 5efd50f] First commit by feature4
1 file changed, 1 insertion(+), 1 deletion(-)
%git push -u origin feature4
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 286 bytes | 286.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To github.com:aliceson89/GitLearn.git
1b0ad1d..5efd50f feature4 -> feature4
Branch 'feature4' set up to track remote branch 'feature4' from 'origin'.
수정된 파일 모습
commit history
github.com
pull request 를 만들어 보자
아직까지는 아무도 push를 하지 않았기 때문에 아무런 충돌이 없다는 모습을 볼 수 있다.
master 의 상황
% git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
% git commit -am "commit by Master"
[master 6ef388f] commit by Master
1 file changed, 1 insertion(+), 1 deletion(-)
% git push
Warning: Permanently added the RSA host key for IP address '140.82.112.4' to the list of known hosts.
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 274 bytes | 274.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To github.com:aliceson89/GitLearn.git
7704f24..6ef388f master -> master
수정된 파일 모습
commit history
github.com
충돌사항 수정하고 다시 commit해서 최종 merge 하기
이제는 command line 을 이용해서 수정해보자
github이 가이드 라인을 제시해 준다.
이제 VS Code 로 돌아가 보자.
feature4 를 master에 merge 하기
먼저 feature4 브랜치에 체크아웃을 한 다음에 master 로 merge 를 하면 아래와 같은 충돌이 난다.
% git checkout feature4
Switched to branch 'feature4'
Your branch is up to date with 'origin/feature4'.
% git merge master
Auto-merging text1.txt
CONFLICT (content): Merge conflict in text1.txt
Automatic merge failed; fix conflicts and then commit the result.
수정된 파일 모습
파일을 위와 같이 수정한 후 다시 commit을 하고 push 를 해준다.
% git add text1.txt
% git commit
[feature4 9088f17] Merge branch 'master' into feature4
% git push
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 328 bytes | 328.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To github.com:aliceson89/GitLearn.git
5efd50f..9088f17 feature4 -> feature4
commit history
github.com
이제 충돌없이 merge pull request 가 가능하지만 여기서 진행 하지 않고 , master 도 commnad line 을 이용해서 수정 후 push 해 보도록 하자.
master 를 feature4에 merge 하기
여기에는 2가지 명령어가 있다.
첫번째, git merge feature4
이 방법은 현재 master에서는 추가적인 수정사항 없었기 때문에 Fast-Forward 방식으로 merge 가 진행되서 새로운 commit을 생성하지 않을 것이다.
두번째, git merge --no-ff feature4
이 방법은 fast-forward 가 해당 하건 안하건 간에 무조건 새로운 commit을 생성해서 merge를 해버린다.
% git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
% git merge --no-ff feature4
Merge made by the 'recursive' strategy.
text1.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
merged 된 파일 모습
commit history
이제 마스터도 새로운 commit을 가지고 있는 것을 알 수 있다.
이제 push 를 해보자.
% git push
Enumerating objects: 1, done.
Counting objects: 100% (1/1), done.
Writing objects: 100% (1/1), 223 bytes | 223.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:aliceson89/GitLearn.git
e97229f..7d9cfac master -> master
github.com
이미 마스터에서 푸시를 하는 순간 자동으로 모든게 merge 가 되버린다.
내용이 도움이 되셨다면 블로그 구독하기 부탁드리겠습니다.
* 이 글의 모든 저작권은 aliceintr에 있으며 무단 배포 및 사용은 자제해 주시기 바랍니다. *
'DevOps > GIT' 카테고리의 다른 글
github 문제풀이 (0) | 2020.12.14 |
---|---|
github#19 git pull request 종류 (0) | 2020.11.27 |
github#17 git pull request 충돌 & web editor 해결 (0) | 2020.11.27 |
github#16 git pull request & git merge request 2편 (0) | 2020.11.27 |
github#15 git pull request & git merge request 1편 (0) | 2020.11.27 |