[TIL / Git] CLI 브랜치와 충돌

Changyun Go·2022년 2월 6일
0
post-thumbnail

Command Line Interface를 통해 Git을 사용하는 방법

브랜치로 작업하기

git branch

git branch 새로운 브랜치명으로 새로운 브랜치를 생성할 수 있다.

  • 새롭게 생성된 브랜치는 현재 브랜치가 가리키는 버전에서 생성된다.

git branch로 브랜치 목록을 볼 수 있다.(별표가 현재 브랜치)

  • 브랜치들의 공통된 조상을 base라 한다.
  • 작업마다 여러 개의 저장소를 만들 필요 없이 공통의 자료를 공유하면서도 서로 다른 이력을 만들어 갈 수 있다.
  • 버릴 수 있는 작업을 만드는 최선의 도구다.

git checkout

git checkout 브랜치명으로 해당 브랜치가 가리키는 버전의 시점으로 돌아갈 수 있다.

git checkout 커밋 아이디로 브랜치가 아닌 커밋을 가리키는 상태는 detached 상태라고 한다.

git log --all --graph --oneline를 통해 모든 브랜치 시각적으로 확인할 수 있다.

git merge

main에 다른 브랜치를 병합하고 싶을 경우

  1. main 브랜치로 checkout
  2. git merge 병합하고 싶은 브랜치

1. 수정한 파일이 다른 경우 or 같은 파일이지만 다른 부분을 수정한 경우

자동으로 병합되어 merge commit이 생성된다.

2. 같은 파일의 같은 부분을 수정한 경우

충돌이 발생한다.

충돌 해결

충돌이 발생한 파일을 열어보면

=======의 상단은 main 브랜치의 내용, 하단은 o2 브랜치의 내용이다.

‘main’과 ‘o2’를 어떻게 할 것인지 선택해서 수동으로 수정한다.(=== 이나 <<< 같은 기호들은 지워준다.)

다시 add하고 git commit을 하면 정상적으로 merge commit이 생성된다.

3 way merge

위 케이스와 같이 main과 다른 브랜치를 병합하는 것을 2 way merge라고 하는데, 3 way merge를 이용하면 병합 시 충돌을 최소화할 수 있다.

브랜치 1, 브랜치 2, base가 있으면

  1. 셋 다 다르면 충돌이 발생하지만
  2. 브랜치 1과 브랜치 2의 내용이 다른데, 브랜치 1이 base와 동일하다면 브랜치 2가 수정된 것으로 판단하고 브랜치 2를 채택하여 자동 병합을 진행한다!

Merge Tool을 이용하는 방법

충돌 상태에서 git mergetool로 merge tool을 실행할 수 있다.

  1. merge tool 설정 : git config --global merge.tool p4merge
  2. 실행 경로 설정 : git config --global mergetool.p4merge.path "C:/Program Files/Perforce/p4merge.exe"

Reference


0개의 댓글