[깃(Git)] 10. 충돌(Conflict)을 해결하는 방법

1. Merge 과정에서 충돌이 났다면?

  • 일반적으로 같은 파일에서 같은 라인을 변경한 두 커밋들을 병합(merge)하게 된다면 충돌(Conflict)이 발생한다.
  • 충돌이 발생하게 되면 conflict marker를 통해 구분이 가능하다.
  • <<<<<<< HEAD======= 사이에 있는 변경사항이 머지를 진행한 브랜치의 커밋 변경사항이다.
  • =======>>>>>>>{커밋 해시} 사이에 있는 변경사항은 머지할 타겟 브랜치의 커밋 변경사항이다.
    1
    2
    3
    4
    5
    <<<<<<< HEAD
    first line
    =======
    new line
    >>>>>>> 671f6f8 (conflict2 파일을 추가한다)
    
  • 충돌을 해결하기 위해선, 위에 있는 conflict marker를 지워주고 어떤 변경사항을 채택할지 결정하면 된다.
1
2
3
4
5
# 충돌 해결 후

$ git add .

$ git commit

2. 하나의 브랜치를 함께 사용하다가 충돌이 나는 경우

  • A 개발자와 B 개발자가 같은 브랜치를 바라보고 작업할 때 A 개발자가 리모트 레포지토리에 먼저 커밋을 올린 상황이다.
  • 그런 상황에서 B 개발자도 동일하게 커밋을 만든 상황에서 리모트 레포지토리에 푸시를 해야한다면 어떻게 해야 할까?
  • 바로 푸시를 할 수는 없기에 풀을 해야 하지만, 이 경우 머지 커밋이 생기는 문제가 발생한다.
  • 이런 상황에서는 pull --rebase를 사용하면 된다.
1
2
# rebase 옵션을 통해 pull을 하면 remote branch의 commit들을 pull한 후, local branch의 commit들을 그 위에 쌓는다.(rebase)
$ git pull origin {브랜치명} --rebase
  • 풀을 할 때 리베이스 옵션을 줘서 커밋의 순서를 일정하게 보장해서 푸시를 바로 진행할 수 있다.
0%