TIL 40 | Git Conflict

ym j·2021년 5월 8일
0

Git & Linux

목록 보기
3/5
post-custom-banner

Git conflict

Conflict?

말 그대로 충돌 이다. 즉, 서로 다른 브랜치에서 같은 코드를 수정하고 merge를 했을때 자동 merge가 실패되는 현상이다.



✔ 구글에 git merge라고만 쳐도, 이렇게 웃긴 짤들이 많다. (내 미래인가.. 크흠...)

위에서 본 짤과 같이, merge 관련 이슈는 빈번하게 일어난다고 한다. (아직 직접적으로 겪진 않았지만.. ) 만일 짧고 간단한 파일들의 conflict인 경우 금방 해결할 수 있지만, 코드가 수백줄, 수천줄이라면.. 생각만해도 아찔할 것이다. 그러나?!! 우리는 할 수 있다. 깃이 하라는 대로만 하면 되니까 ㅋㅋㅋㅋ... 때문에 프로젝트에 들어가기 전, 생활코딩 강의를 참고하여 간단한 conflict 복습 겸 연습을 해보았다.



Make branch(master, exp)


위 이미지를 간단히 설명하면 다음과 같다.

  • master branch에서 함수 및 return 1 생성 (이때 함수는 기능을 하는 것이 아닌, 단순 예시를 위해 작성한 것이다.)

  • exp branch 생성 및 이동, return 1 => return exp 변경

  • 다시 master branch로 이동 및 return 1 => return master로 변경



Merge, conflict

master branch에서 exp branchmerge한 결과, conflict가 났다. 그 이유는 내가 작성한 test 함수 안의 return master에다가 exp branchreturn exp를 합치려고 했기 때문이다. 즉 특정 코드의 추가 혹은 제거가 아니라 수정된 두 branch 중에 하나를 선택해야 하는 상황이기에 프로그램은 자동으로 merge를 하지 않고 사용자에게 conflict를 띄워 상황을 알려주는 것이다.


✔ 이처럼 양쪽에서 수정이 됐다고 경고창이 뜨게 된다. (물론 conflictgit merge --abort를 통해 취소도 할 수 있다. )



How to fix it?

conflict를 해결하는 방법은, 내용을 고치면 끝이다. (생각보다 어렵지 않다.) 물론 로직이 복잡해지고 코드 양이 많아지면 접근 경로가 어렵고 난감해지겠지만, 결론적으로는 수정만 하면 되기 때문이다.

HEAD는 현재 위치한 branch의 내용이고 아래는 merge하고자 하는 branch의 내용이며 아래와 같이 내용을 수정하였다.

function test(){               // 같은 함수
	return "master", "exp"     // 수정 내용
}


✔ 파일 수정 후 git add, git status를 통해 파일이 수정됐음을 알 수 있으며 git commit을 한 후 ,파일 내용을 확인해보면 정상적으로 merge가 됨을 알 수 있었다.



✔ VSC에서 지원하는 Git Graph extension, git log등을 통해 commit 내역 및 branch 상황을 좀더 자세하게 알 수 있다.



Reference

profile
블로그를 이전하였습니다 => "https://jymini.tistory.com"
post-custom-banner

0개의 댓글