[Git] branch, merge 충돌해결

go_go_·2022년 10월 12일
0

Git

목록 보기
7/12
post-thumbnail

👉 다른 브랜치와 병합할 때..

  • 각 브랜치에서 수정한 파일이 다르면 무조건 합침
  • 각 브랜치에서 수정 파일이 같으면?
    • 수정한 위치가 다르면 자동으로 합친다.
    • 수정한 위치가 같다면? -> 충돌

⚡ 충돌이 일어났을 때

각자 다른 브랜치에서 같은 파일의 같은 위치에 다르게 수정하고 병합시도 했다면? -> 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브랜치와 branch2브랜치

main에서 file.txt를 만들고 branch2를 생성했다. 이때 file의 상태는 다음과 같다.

mainbranch2
file 내용commoncommon

이때 branch2에서 file.txt를 다음과 같이 수정했다.

mainbranch2
file 내용commonbranch2

다시 main으로 돌아가서 file.txt를 수정한다.

mainbranch2
file 내용mainbranch2

이 때 상황은 이렇다.

공통조상mainbranch2
file 내용commonmainbranch2

다음은 git의 log 모습이다.

간단한 그림으로 표현하면 다음과 같다. 노란 박스는 커밋, 괄호는 브랜치이다.


branch2과 병합을 시도하면 file.txt에서 충돌이 일어난다.
그 이유는 현재 mainbranch2 에서 같은 파일(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

profile
개발도 하고 싶은 클라우드 엔지니어

0개의 댓글