DevOps/GIT

github#18 git pull request 충돌 & command line 해결

aliceintr 2020. 11. 27. 14:33
반응형

다양한 브랜치에서 동시에 작업을 하고 remote repository 에 push 를 한다면 충돌은 피할 수 없을 것이다.

이럴 때 해결할 수 있는 방법 중 하나에 대해서 알아본다.

 

앞에 글은 web browser을 이용한 merge 였다면 이번에는 cmd line을 이용해 해결해 보자

[IT/DevOps] - github#17 git pull request 충돌 & web editor 해결

 

먼저 충돌이 될 상황을 만들어 준다.


가정

  1. [feature4] Branch에서 text1.txt 파일을 수정하고 있는데 이와 동시에 [master] Branch에서 동일한 파일을 수정하고 있다. 같은 라인을 수정하고 있다고 가정하자.
  2. [feature4] 가 remote repository로 push
  3. [master] 가 remote repository로 push
  4. 원본파일


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에 있으며 무단 배포 및 사용은 자제해 주시기 바랍니다. *

반응형