Merge & Rebase

sangjuneeeee·2024년 5월 6일

Git

협업을 위한 Git 사용 방법

Merge

Merge란

on branch main
$ git merge branchName

위치하고 있는 브랜치에 branchName의 변경사항을 위치하고 있는 브랜치에 병합

$ git pull                     //리포지스토리를 최신상태로 만들기 위해

$ git switch -c branchName     //브랜치를 변경하여 작업하기 위해
  • 예시를 위한 파일 생성
    $ touch test.txt                //파일 생성
    $ vi test.txt                 //편집
    $ :wq                         // wq는 저장 후 종료, q는 종료
$ git add test.txt              //스테이징에 추가

$ git status                    //상태 확인

$ git commit                    //스테이징 상태에 있는 파일 커밋

$ git switch main               //머지를 위해 

$ git pull                      //머지 전 재차 최신화

$ git merge branchName          //현재 위치하고 있는 브랜치에서 브랜치네임으로 머지

$ git switch branchName         //브랜치네임으로 스위치

$ git push origin branchName    //원격저장소에 있는 브랜치네임에 푸시(브랜치네임이 없다면 자동 생성)

Merge

Merge 충돌

$ git switch main
$ git merge branchName

충돌

<<<<<<< HEAD
// 내 커밋의 변경 내용
=======
// 다른 사람의 커밋의 변경 내용
>>>>>>> other_branch

충돌난 코드들을 해결한다.

1. 통합하여 새로 커밋하기

git add <파일명>   // 충돌 해결한 파일을 스테이징합니다.
git commit       //충돌 해결을 커밋합니다.

2. 통합 후 최신화하기

git add <파일명>        // 충돌 해결한 파일을 스테이징합니다.
git merge --continue  // merge 작업이 완료됨

Merge의 장단점

장점 : 충돌이 날 경우 한 번에 모두 해결 후 병합이 가능하다.

단점 : 브랜치가 많아질 경우 커밋 히스토리가 매우 복잡해지기 때문에 가독 및 추적이 불편하다.

Rebase



$ git switch branchName // 개발한 브랜치로 이동
$ git rebase main       // 베이스로 설정할 브랜치

충돌

<<<<<<< HEAD
// 내 커밋의 변경 내용
=======
// 다른 사람의 커밋의 변경 내용
>>>>>> other_branch

충돌난 코드들을 해결한다.

충돌 해결 후

$ git rebase --continue

Rebase의 장단점

장점 : 커밋 히스토리를 깔끔하게 유지할 수 있다.

단점 : 커밋 히스토리가 변경되기 때문에 신중해야하고, 원격 리포지스토리에 있는 브랜치에는 rebase 안하는 것을 강력 권장함 즉, 로컬 환경에서

  • Merge와 Rebase의 차이

rebase는 브랜치에서 커밋한 것이 rebase하게 되면 merge와 다르게 커밋이 master브랜치에 추가가 됨

detail

  • 다른 브랜치에서 작업을 한 것을 또 다른 브랜치로 옮기고 원격 저장소에 브랜치와 함께 push하고 싶은 경우
    예시) 실수로 feature/branchName 이 아니라 main 브랜치에서 작업을 한 경우
on branch 'main'
$ git add .
$ git commit -m "commit message"
$ git switch feature/branchName
$ git merge main // or $ git rebase main
$ git push origin feature/branchName

main 브랜치에서 작업한 것을 commit 한 후 feature/branchName과 병합하여 새로 만든 브랜치로 원격저장소에 push할 수 있음. 잘못했을 경우 commit history를 깔끔하게 유지하게 하기 위해 rebase를 사용하는 것을 추천.

  • 협업자와 브랜치 명이 다를 경우
  1. 원격저장소에 존재하는 master브랜치에 push 하고 싶을 경우
 on branch main
 git push origin main:master
  1. 로컬저장소의 브랜치 네임을 변경하는 방법
 $ git branch main master

main 브랜치를 master 브랜치로 이름이 바꿔짐 이후 $ git push origin master 가능

  1. 원하는 로컬브랜치로 원격 저장소에 있는 브랜치 갖고오기
$ git switch -c <local_branch_name> origin/<branch_name>
  • git fetch
 $ git fetch -p

git 원격저장소에는 없는 branch를 로컬 저장소에 남아있는 branch 제거

  • git pull

    git fetch + git merge 간략화

  • git branch -d BranchName // 로컬 브랜치 제거


참조 : https://www.youtube.com/watch?v=6nc_0-HWZXU

profile
지식 쌓아두기 블로그

0개의 댓글