서로 다른 브랜치에 공통되는 base branch
를 기점으로 충돌을 최소화 시키는 방법
브랜치간의 병합을 진행할 때, base를 기준으로 어떠한 브랜치의 파일이 수정되었는지
확인할 수 있어서 충돌의 문제를 해결하는데 효과적입니다.
My branch
와 Other branch
의 공통적인 정보를 갖고 있는 commit Base
먼저, commit Base
가 없을 경우에 충돌발생을 해결하는 방법을 예로 들어보겠습니다.
1. My branch
에 Other branch
를 병합하려고 합니다.
2. 병합 진행 중에 브랜치간의 특정한 파일에서 충돌이 발생합니다.
3. 충돌을 해결하기 위해서 파일을 열어보니, 두 개의 브랜치간의 파일 내용이 다릅니다.
4. 두 개의 브랜치에 두번 째줄 b 말고는, 어떤 파일이 수정되었는지 알 수가 없어서
어떤 브랜치의 파일 내용을 선택해야 하는지 알 수 없습니다.
5. 이럴 경우에는 모든 브랜치의 파일을 확인해서 수동으로 3개의 충돌을 해결해야 한다.
이렇게 충돌되는 부분을 수동으로 해결 할 때, 최소화 시키기 위해서 base commit
을 사용.
1. my branch
와 other branch
를 병합
2. 세번 째 줄을 제외하고는 충돌이 발생하지 않았습니다.
3. base commit
을 보고 병합했기 때문에, 어떤 파일에서 수정을 했는지 확인할 수 있어서
세번 째 줄을 제외하고는 파일을 수정한 저장소의 내용을 선택 합니다.
4. 세번 째 줄은 두 브랜치에서 모두 수정했기 때문에, base를 비교해봐도 어떤 내용을
선택해야 할지 모릅니다. 이런 부분은 수동으로 해결해주시면 됩니다.
이런식으로, 모든 충돌을 자동으로 해결할 수는 없지만, 대부분의 충돌 발생 상황을 GIT
에서
자동적으로 해결해줍니다.
이렇게 base commit
을 참조해서 충돌을 해결하는 방식을 3 way merge 라고 합니다.
1. main branch
에서 파일 커밋 후 2개의 브랜치를 생성 합니다.
2. here branch
에서 파일 수정 후 커밋
3. there branch
에서 파일 수정 후 커밋
4. GIT
내역 확인
5. here branch
에서 there branch
를 병합하고 결과 확인
6. 충돌 해결 후 커밋 결과 확인
GIT
에서 자동적으로 병합할 때 상황에 맞게 fast-forward
또는 3 way mergre
방식을
선택하는 것을 알 수 있습니다.