[Git] Merge & Confilct

jayce·2024년 6월 18일

Merge

git merge <branch_name>
  • 현재 위치한 버전에 다른 버전을 병합하는 작업

  • Branch를 병합하거나 Push, Pull할 때도 일어남

  • Main Branch → Dev Branch 를 병합 ⠀⠀⠀⠀⠀

    Commit(main의 결과물인 C6 생성)
  • Dev Branch → Main Branch 를 병합⠀⠀⠀⠀⠀

    Commit(dev의 결과물인 C6 생성)⠀
  • 변경 사항이 없을 때 병합을 하면 Head만 바뀌거나 아무변화 일어나지 않음
    ✔︎ Main Branch 변경 사항이 없을 때 Dev Branch 를 Merge

    Commit
    ✔︎ Dev Branch 에서 변경 사항이 없는 Main Branch 를 Merge
    Commit

Conflict

  • 두 Branch에서 같은 버전의 같은 부분을 수정하는 경우, Auto Merge가 불가능한 상황에서 발생

  • 개발자가 직접 해결해야 한다

Conflict가 발생한 파일

  • Conflict Message 와 Git Status 로 확인 가능
<<<<<<<< HEAD
print ("Hello, cat!")
=======
print ("Hello, dog!")
>>>>>>>> HEAD
  • 위 같은 형태로 오류가 나타남

  • Merge 과정에서 충돌 발생시 가운데 ======을 기준으로 충돌부분을 보여주는 데 이를 기준으로 코드 수정

Conflict 해결

1. 파일 수정 ⭐⭐⭐⭐⭐

print("Hello,cat!")

2. Git add

git add <conflict_file_name>

3. Git Commit

git commit -m <merge_message>
  • Git Commit까지 완료되면 Conflict상태가 해지되어 Merge 할 수 있음
  • 💡 참고. Git Commit이 실패하는 경우, git commit -i로 강제 commit할 수 있음
  • Merge 도 완료됨
  • 오류내용 수정 후, add, commit 과정을 거치면 된다

(참고) commit 이 실패하는 경우, git commit -i 로 강제실행할 수 있음

💡 Push 동작 중 Conflict 발생

  • Push 가 실패
  • Pull 을 해서 conflict 에러를 확인 가능

    💡 Pull 동작 중 Conflict 발생
  • Fetch 만 되고 Merge가 실패한 상태
  • Conflict 를 해결하면 Merge Commit 이 완료됨

    ✅ 바로 Push 하지 말고 항상 Pull 먼저 하는 습관을 들이자!

실습

  • Remote Repository 생성
    ⠀-> merge_project라는 이름으로 생성, README.md file 생성
  • 주소 + Token 복사
  • Local Repository로 Clone

Branch를 Merge해보자

dev branch를 만들고 확인

main으로 이동해서 파일 만들기

dev로 이동해서 파일 만들기

list 와 log로 확인

main branch 에서 dev branch 병합하기

각 branch 상태 확인

main branch Push

Github에서 확인

-> 아직 branch는 main 하나만 있고 dev는 없음

dev branch Push

Github 에서 보면 dev branch 생성

Remote branch를 Merge해보자

Github에서 dev2 branch 만들기

-> 현재 main의 최신 버전으로 dev2가 생성됨

dev2 branch에서 새 파일 만들기

Commit

-> message는 자동으로 생성된다 (수정가능)

dev2를 fetch (download)

main branch에 dev2 branch를 Merge

Conflict

main.py 수정

dev3를 생성 후 수정

dev3로 가서 같은 파일을 수정하기

vi로도 수정 가능 - D누르고 방향키로 삭제 후 수정 / dd는 줄 삭제

dev3에서 main merge하면 conflict 상황 발생!

conflict가 발생한 파일 수정

💡vi main.py conflict 화면
print("hello, cat") 빼고 모두 삭제하기 (<<<<, ==== 이런것도 전부 삭제)

add 후 commit 하면 conflict 해결!

0개의 댓글