각자 다른 브랜치에서 같은 파일의 같은 위치에 다르게 수정하고 병합시도 했다면? -> Automatic merge failed
자동으로 합병이 실패하면서 충돌이 일어난 부분을 고쳐주어야 한다.
Auto-merging 충돌파일
CONFLICT (content): Merge conflict in 충돌파일
Automatic merge failed; fix conflicts and then commit the result.
git status를 입력하면 병합에 실패한 파일이 뜬다(both modified). 해당 파일에 들어가 수정해주고 add 후 commit을 해주면 충돌 해결된다.
다음 예시를 보며 설명하겠다.
main
에서 file.txt를 만들고 branch2
를 생성했다. 이때 file의 상태는 다음과 같다.
main | branch2 | |
---|---|---|
file 내용 | common | common |
이때 branch2
에서 file.txt를 다음과 같이 수정했다.
main | branch2 | |
---|---|---|
file 내용 | common | branch2 |
다시 main
으로 돌아가서 file.txt를 수정한다.
main | branch2 | |
---|---|---|
file 내용 | main | branch2 |
이 때 상황은 이렇다.
공통조상 | main | branch2 | |
---|---|---|---|
file 내용 | common | main | branch2 |
다음은 git의 log 모습이다.
간단한 그림으로 표현하면 다음과 같다. 노란 박스는 커밋, 괄호는 브랜치이다.
branch2
과 병합을 시도하면 file.txt에서 충돌이 일어난다.
그 이유는 현재 main
과 branch2
에서 같은 파일(file.txt)에서 같은 부분을 수정해서 서로 다른 내용을 가지고 있기 때문이다.
자동 합병을 실패하며 커밋은 생기지 않는다. git status
를 보면 both modified에 충돌이 일어난 파일이 뜬다.
file.txt에 들어가 충돌이 일어난 부분을 수정해주어야 한다.
<<<<<<< HEAD
main // file.txt에서 main이 수정한 부분
======= //구분선
branch2 // file.txt에서 branch1이 수정한 부분
>>>>>>> branch2
위처럼 표시된 부분이 우리가 고쳐주어야 하는 부분이다. 쓸 부분은 남기고 지울 부분은 지우면서 수정해준다.
수정이 모두 끝났다면 해당 파일을 다시 add해주면 다음과 같이 된다.
이제 모두 끝났다. 커밋을 해주면 다음과 같이 커밋 자동 메세지가 생긴다. 자유롭게 커밋메세지를 작성해주면 병합이 완료된다.
출처
https://www.youtube.com/playlist?list=PLuHgQVnccGMA8iwZwrGyNXCGy2LAAsTXk