티스토리 뷰

정리용/git

[git] 충돌(conflict)

hee-ya07 2024. 12. 24. 16:11

1. Conflict

: 두개 이상의 브랜치에서 동일한 파일을 동시에 수정하고 병합할 때 발생하는 문제

(소통의 부재,,, 리뷰를 제외한 코드 건들기,,,,)

 

2. 해결 방안

2.1 Fast-Forward Merge

: Local에 어떠한 작업도 없을 때,

: Remote의 작업물을 그대로 가져옴(remote의 FETCH_HEAD == 로컬 HEAD)

  • 명령어
    1. git fetch + git merge origin/main
    2. git merge --ff origin/main - Default, 병합 시 Fast-Forward를 강제
    3. git pull --ff-only origin main - 원격 저장소에서 Fast-Forward만 허용하여 병합
  • 설정
    : git config pull.ff only - Fast-Forward만을 허용

2.2 3-way Merge

: 원격 FETCH_HEADHEAD 를 합침
: 새 Merge Commit 생성

: 두 브랜치에 각각 다른 변경 사항이 있을 때 사용 -> 수동 해결
: 병합(merge) 커밋이 쌓여 히스토리가 이상해

  • 명령어
    1. git fetch + git merge --no-ff origin/main
    2. git pull origin main
  • 설정
    : git config pull.rebase false  (Default)

2.3 Rebase and Merge

: 원격 FETCH_HEAD 를 기준으로 다시 Commit 들을 적재

: 병합 커밋 생성X, 기존의 커밋을 재정렬 -> 하나의 연속된 커밋처럼 만듦

: 일관된 커밋 히스토리를 유지

: 단, 커밋 순서가 바뀌므로 유의(log 상 시간 관계가 이상해짐)

  • 명령어
    1. git fetch + git merge --no-ff origin/main
    2. git pull --rebase origin main - 원격 브랜치의 변경 사항을 기반으로, 로컬 커밋을 다시 적용
  • 설정
    : git config pull.rebase true - Rebase를 사용하여 병합할 때마다 자동으로 Rebase 방식을 적용

2.4 Squash and Merge

: 여러 개의 커밋을 하나의 커밋으로 합친 후 병합

: 병합 과정에서 상대방의 커밋을 모두 파괴 -> 상대의 커밋 내역 삭제됨 

: 협업 시 사용 X

  • 명령어
    1. git fetch + git merge --squash origin/main

 


참고

ASAC 수업자료

https://wonyong-jang.github.io/git/2021/02/05/Github-Rebase.html

 

[Git] Rebase와 Conflict 해결 방법 - SW Developer

이전글에서는 브랜치를 병합하는 방법 중 Merge와 Squash Merge 방법에 대해서 살펴보았다. 이번 글에서는 Rebase를 이용하여 브랜치를 병합하고 충돌시 해결 방법에 대해서 살펴보자. 또한, rebase intera

wonyong-jang.github.io

 

'정리용 > git' 카테고리의 다른 글

[git] branch 관리 - 3 : 커밋 관리  (0) 2024.12.26
[git] branch 관리 - 2 : Statging Area 관리  (1) 2024.12.26
[git] HEAD: 커밋 추적 포인터  (0) 2024.12.24
[git] remote repository 관리 - 1  (0) 2024.12.24
[git] branch 관리 - 1  (0) 2024.12.24
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함