Merge and Conflict

정한별·2024년 6월 22일
0

Git Merge

git merge <branch_name>

• 현재 위치한 버전에 다른 버전을 병합하는 작업
• Branch 를 병합하거나
• Push Pull 할때도 일어난다.
• merge할때 commit 메세지가 비어있으면 자동으로들어간다.

⭐ merge를 할때 주의해야될 것은 head의 위치!

Main Branch 에서 Dev Branch 를 Merge

↪️ branch에서 작업을 하다가 작업 결과가 잘나와서 merge를 하고 branch를 종료하는 경우에 main으로 많이 합친다.

Merge Commit

Dev Branch 에서 Main Branch 를 Merge

↪️ 별도로 작업을 하고는 있지만 메인에서 계속 갱신되는 부분에 대해서 계속 공유를 받아야되는 경우, 개발중에 소스 싱크를 맞춰야할 때 주로한다.

Merge Commit

Main Branch 변경 사항이 없을 때 Dev Branch 를 Merge

↪️ c2 버전에서 branch를 냈는데 main은 갱신이 없다.
그런데 dev만 갱신을 한 상태 main에서 dev를 merge 하고 싶지만 합쳐도 이 버전 그대로 이다.

Merge Commit

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


↪️ merge를 해도 버전 차이가 없기 때문에 아무일도 일어나지 않는다.

Merge Commit

Conflict

• 두 Branch 에서 같은 버전의 같은 부분을 수정하는 경우,
Auto Merge 가 불가능한 상황에서 발생
• 개발자가 직접 해결해야 한다

Conflict 가 발생한 파일

• Conflict Message 와 Git Status 로 파악할 수 있다
• 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 도 완료된다

❓ Push Pull 중에 Conflict 가 발생하면

Push 동작 중 Conflict 상황이 발생하면,

• Push 가 실패함
• Pull 을 해서 Conflict 에러를 확인 할 수있음

Pull 동작 중 Conflict 상황잉 발생하면,

• Fetch 만 되고 Merge 가 실패한 Conflict 상태가 됨
• Conflict 를 해결하면 Merge Commit 이 완료됨

❗그래서, 바로 Push 하지말고 항상 Pull 먼저 하는 습관이 좋다!!

Branch 를 Merge 주요 코드

  1. GitHub 에 Remote 저장소를 만들기
  2. Local 저장소로 클론해서 복제
  3. Dev Branch 를 만들고
    git branch dev
  4. Main Branch 에 파일 추가
    echo .> main.py
    git add main.py
    git commit -m "add main.py"
  1. 이번에는 Dev Branch 에 파일 추가
    echo .> dev.py
    git add dev.py
    git commit -m "add dev.py"
  2. 각각 Branch 에 파일이 존재
  3. 이제 Main Branch 에서 Dev Branch 를 Merge
    git merge dev

Remote Branch 를 Merge 주요코드

  • Local 저장소에는 Dev2 Branch가 없을 때
    git fetch
    git merge origin/deve2

📌 gihub 프로젝트 삭제 방법

setting - general 맨밑 Delete this repository 누르기

📌 git checkout -b dev2 - 만들고 바로 브랜치로 이동도 해준다.
dev -당시 만들 때 내 시점으로 생긴다.

❓만약에 내가 만든 branch가 아닌데 remote에는 branch가 있는 경우

  • dev2를 패치만 하고 반영이 안된 상태였다가 내가 로컬에서 checkout를 하자
    ↪️ 로컬에 없던 dev2를 만들어 같다라는 걸 해주고 checkout을
    해주겠다는 말
    ↪️remote에 있는 dev2를 pull하는 순간 나는 지금 메인 브랜치에 있어서 패치만 한 것이다.(git fetch)
    = 로컬에 저장만 한 상태 그래서 내가 브랜치를 봤을 때 저장만 되어있지 정보를 갱신하지는 않는 상태이다.
    그런데 checkout 하겠다는 순간 패치는 해서 갈 수 있는 준비는 다 되어있는 상태이다.
    그래서 로컬에도 dev2를 만들고 checkout을 자동으로 해준 것이다.

0개의 댓글

관련 채용 정보