Learn & Run

Git & Sourcetree - Branch 충돌 해결하기 본문

Collaboration/Git

Git & Sourcetree - Branch 충돌 해결하기

iron9462 2021. 1. 17. 22:33

목표

 

충돌이란 무엇이고, 어떻게 해결하고, 어떻게 효율적으로 충돌을 피할 수 있고, 예방적인 차원에서 충돌이 덜 일어나게 할 수 있는가에 대해 알아보도록합니다. 

 

 

브랜치를 나누었을 때, 각자 작업을 할 상황이 생깁니다. 하지만, 서로 같은 곳을 수정했을 경우 버전 관리 프로그램이 자동으로 병합할 수 없을 때 사용자에게 해결방법을 위임하는 경우가 종종 발생합니다. 

 

 

1. 새로운 브랜치 test2를 추가하기

 

  • 충돌을 실험하기 위해, 브랜치를 추가해주도록 합니다.

 

2. 새로 만든 브랜치에서 텍스트 파일 내용 수정하기

 

  • master 브랜치의 파일내의 텍스트 파일 내용도 동일하게 변경할 것 입니다.
  • 저는 7번째 줄에 동일하게 작업을 해주도록 하였습니다.

 

 

 

3. master 브랜치로 이동후에 텍스트 내용 변경하기

 

  • test2 브랜치 내에서와 동일한 위치에서 텍스트 파일 내용을 수정합니다.

 

 

 

4. master와 test2 브랜치를 병합시키기

 

  • master 브랜치가 선택된 상태인지 다시 한 번 확인합니다.
  • 아래 그림과 같이 병합을 진행합니다.

이전에 병합했을 때랑 다르게 위 그림과 같은 팝업 메시지가 나타나게 됩니다. 저희가 의도했던 대로 충돌이 발생했다는 메시지를 얻게 되었습니다. 저희는 두개의 서로 다른 브랜치가 하나의 파일 안에서 같은 위치의 내용을 수정했기 때문에 이러한 문제가 발생한 것 입니다. Git의 입장에서는 어떤 브랜치의 코드를 적용해야 할지 알 수 없기 때문에 이러한 상황에서는 충돌을 발생시켜 사용자에게 나머지 처리를 위임하고 있습니다.

 

 

 

5. Sourcetree와 텍스트 파일 다시 한 번 확인해보기

 

  • 병합 버튼을 누른 후, 어떤 일이 일어나고 있는지 확인해 보도록 합니다.

아직 Commit이 되기 전인 상태로 나타나는 것을 확인할 수 있습니다.
해당 파일을 열면, 위의 그림과 같이 수정 내용이 뒤섞인 것을 확인할 수 있습니다. 현재 선택한 브랜치가 HEAD를 나타냅니다. 또한 HEAD와 test2라고 써있는 것을 보면 각 브랜치에 대응되는 커밋메시지가 나타난 것을 확인할 수 있습니다.
사용자가 직접 코드 수정을 완료하도록 합니다.

 

 

 

6. Git에게 충돌을 해결했다고 알리기

 

  • Mark Resolved 버튼을 눌러 Git에게 충돌을 해결하였음을 알리도록 합니다.

여기서 Resolve using ‘Mine’는 현재 브랜치 상태를 채택한 후 나머지를 버리고, Resolve using ‘Theirs’ 병합할 브랜치를 채택하고 현재 브랜치 상태를 버립니다. 
병합후 충돌이 발생하여 사용자가 충돌과 관련된 커밋을 할 것을 Git은 알고있기 때문에, 사용자를 대신하여 커밋메세지를 통해 알려주고 있습니다.