Git_병합(merge), PULL 및 충돌 해결하기

Song Chae Won·2022년 7월 20일
0
post-thumbnail

✔ 병합이란?

: 하나의 브랜치를 현재 브랜치와 합치는 것을 병합(merge)라고 합니다. 현재 브랜치는 헤드(HEAD) 브랜치라고 한다고 했죠? 예를 들어 헤드 브랜치가 master 이고 여기서 version2 브랜치를 병합하면 version2의 내용이 master에 반영되게 됩니다. 병합시 자주 발생하는 상황에 대해 알아보도록 합시다.

🔻 상황1: 헤드 브랜치에 변경 사항이 없을 경우

  • 헤드 브랜치에 갱신된 내용이 없을 때, 주로 혼자 작업을 할 때 발생하는 상황입니다.

    위 그림은 헤드 브랜치(*이 붙어 있는)인 master에서 version2가 시작되고 두 번 커밋한 상태입니다. 여기서 병합을 하면 단순하게 master 브랜치가 가르키는 커밋이 version2의 커밋으로 이동합니다. 이런 상황을 fast-forward 라고 합니다. 단순히 브랜치의 참조만 갱신되는 상황이죠.

🔻 상황2: 가지가 생겨난 경우

  • 과거의 커밋으로부터 브랜치를 생성해서 작업을 한 경우
  • 새로운 브랜치 작업 이후에 헤드에 다른 새 커밋이 있는 경우
  • 여러 브랜치를 동시에 작업하면서 병합을 시도할 경우

보통 가장 최신 내용 하나만 선택하면 되는 경우가 많습니다.
그리고 최신 내용은 보통 타겟 브랜치에 있는 경우가 많습니다.


(해결되었을 때 그림)

✔ 안 쓰는 브랜치 삭제하기

현재 브랜치(HEAD) 가 아닌 경우 간단하게 삭제 가능
브랜치를 삭제했을 경우 사라지는 커밋이 있는지 없는지 확인하자!

✔ git pull

서버의 내용이 최신일 경우 pull을 적용한다.
충돌이 날 수 있지만 놀라지 말자.
pull = fetch + merge

✔ 충돌의 발생원인

자동병합을 실패했을 경우 발생
주로 두 커밋이 같은 파일을 편집했을 경우 발생

✔ 일반적인 해결 방법

1) 에디터를 이용한 해결
2) 병합툴을 이용한 해결
3) sourceTree를 이용한 해결

에디터를 사용한 해결

"겁 먹지 말고" 충돌난 파일을 꼼꼼히 읽어가며 수동으로 수정한다.

내것 또는 저장소 것 선택하기

혼자서 작업할 경우 일반적으로 두 변경사항 중 하나(주로 내 것)가 최신이고 정답일 가능성이 높다.

충돌을 해결했는데 이상해졌다면

reset을 이용해 되돌리기 시전

profile
@chhaewxn

0개의 댓글