깃 브랜치 merge CONFLICT!
깃 브랜치 기초 merge에서 주의해야 할 사항 CONFLICT!
https://project-angieangel.tistory.com/96
깃 브랜치 기초(생성, 삭제, 체크아웃, merge)
위의 현재 내가 위치한 브랜치는 main (참고로 예전에는 master 브랜치가 default였는데 지금은 main이 default 브랜치 이름이다.) 그리고 git history를 보면 지금 헤드가 어디를 향하는지도 알 수 있다. 지
project-angieangel.tistory.com
각각의 브랜치에서 수정한 사항을 커밋한 후에
또 다른 브랜치의 수정사항을 merge하면 충동conflict가 일어나게 된다.
각각의 브랜치를 수정하고 premium 브랜치로 다시 돌아와서
merge하면 CONFLICT!
CONFLICT 된 사항은 위처럼
<<<<<<HEAD
( 지금 HEAD인 premium branch의 내용)
=====
>>>>>>main
( 머지할 main branch의 내용)
으로 확인 할 수 있다.
이는 각각의 수정사항이고 반영할 내용을 선택하라는 의미!
해결방법은 간단!
반영할 내용을 선택해서 충돌사항을 없애면 된다.
즉,
1번 컨플릭트가 발생한 파일을 연다.
2번 머지의 결과가 되었으면 하는 모습대로 코드를 수정한다.
3번 커밋하고 머지커밋메시지 작성하기!
위 같은 경우는 지금 premium 브랜치에서 main 브랜치를 merge하려는 상황이기 때문에
앞으로 premium 브랜치에서 devide의 함수의 이름을 어떤것으로 할 지 정하면 된다.
즉, 그대로 devide_premium 으로 하거나 아예 새이름으로 하거나 선택하면 된다.
<<< === >>> 내용을 다 지우고 수정하고 커밋 하면
merge Coflicts를 해결했기 때문에 위와 같은 커밋 창이 뜨게 되는데
이 커밋 메시지는 수정해도 되고 그대로 써도 된다.
:wq 로 저장, 빠져나오고
$git history로 살펴보면
머지 커밋 메시지가 잘 추가 된것을 확인할 수 있다.
Conflict가 발생한 파일이 너무 여러개 일경우에는
파일 하나씩 Conflict를 해결하고 $git add[파일 이름] 커맨드로
하나씩 staging area에 올리거나(중간중간에 git status 커맨드로 현재 상태 확인 필수!)
모든 파일들의 conflict를 다 해결하고 git add . 커맨드로 한번에 staging area에 올려 커밋을 하는 수 밖에 없다.
왕도란 없다~
해결방법은 간단!
반영할 내용을 선택해서 충돌사항을 없애면 된다.
했지만,, 사실 CONFLICT 를 해결하지 않고 그냥 merge 자체를 취소해도 된다!
(즉, merge를 시도하기 이전의 상태로 돌려서 그냥 merge자체를 취소하는 것)
merge 작업을 취소하고 싶으면 $git merge --abort 를 입력하면 된다.
당연히 꼭 머지해야 되는 상황이면 Conflict를 해결해야겠지만~
그냥 좀더 나중에 머지하고 싶거나
Conflict가 발생한 파일들이 너무 많아서 Conflict를 최소화할 수 있는 방식으로 파일들을
다시 수정하고 커밋한 다름에 머지를 하고 싶을 때 종종 이 방법을 쓰기도 한다.