[Git & Github] merge 전략 (merge commit, squash, rebase) 및 다양한 기능들

늘보·2025년 2월 25일

Git & Github

목록 보기
5/6
post-thumbnail

📌 Git Commit Convention 참고하기

Merge 전략

Merge Commit

기존의 merge 전략

git add .
git merge 브랜치명 --no-ff -m "commit message"

위의 명령어 입력을 통해 merge commit 할 수 있다.

💡--no-ff : 작업 기록을 남기고 하겠다는 의미

Git에서 개발자들이 브랜치에서 작업한 커밋(예: #1, #2, #4)을 ➡︎ 다른 브랜치(예: master)에 merge 할 때, Git은 변경 사항을 결합하고 이를 기록하기 위해 새로운 Merge Commit(예: #5)을 생성한다.

💭 만약, 2사람 이상이 기존 base line (예: master)에서 변경 후 merge를 한다면?
➡︎ 위의 사진과 같이 History가 복잡해진다.


새로운 Merge Commit은 언제, 어떤 브랜치가 통합되었는지 나타내기 때문에 여러 기능들을 언제 제작하였는지 정확히 알리고 싶을 때 사용한다.

Ex> main에 dev 배포 날짜를 정확히 표시할 때


충돌

merge commit으로 충돌 해결 시 History가 점점 복잡해진다.

Squash

여러 개의 커밋을 하나의 커밋으로 합치는 작업을 의미한다. 주로 불필요하게 쪼개진 커밋이나 동일한 부분에 대한 반복된 커밋을 정리할 때 사용한다.

➡︎ 합칠 Commit들을 선택한 후 Squash commit을 누르면 된다.


Rebase

기준 브랜치를 기준으로 다시 기준열을 맞추는 방법이다.

Rebase 흐름

기준 브랜치(master)에서 브랜치 A가 분기된 후, 사진의 1번 과정과 같이 master에 새로운 커밋(변경 사항)이 추가된 후 Merge되면, 브랜치 A는 master의 최신 상태에 맞춰 커밋을 rebase해야 한다.


[브랜치 A 만들기]

git switch -c 브랜치명 🟢 브랜치 생성 및 이동

[최신 상태 반영하기]

git rebase 기준 브랜치명 🟢 만든 브랜치에서 변경된 기준 브랜치 rebase하기

➡︎ rebase를 하고 난 이후 브랜치 A의 코드 PR을 진행하고 Merge 한다.

아래 사진과 같이 Rebase로 Merge 가능하다.


Rebase 충돌

충돌 해결 후

git rebase --continue 🟢 rebase 완료하기

를 했을 때, Successfully가 뜨면 충돌 해결

➡︎ 이후 push 시도를 할 때 remote와 기준 브랜치의 코드 내용이 다르기 때문에 강제 push를 해주어야 한다

git push --force 🔴강제 push 

⚠️강제 push를 하면 원격 브랜치의 기존 커밋 히스토리를 덮어쓰기 때문에, 팀원과의 협업 시 다른 작업이 손실될 수 있다.
따라서, 항상 모든 사람들이 기준 브랜치와 싱크를 맞춰야한다.


🟢 Merge Commit VS Rebase 🟢
기준 브랜치는 새로운 Merge Commit을 만들어서 병합 작업을 진행 하지만, Rebase는 기준 브랜치에 맞춰 재 정렬을 한다.

📢 Rebase의 경우 복잡한 Command가 들어가지만 History 파악이 쉬워진다.


Cherry Pick

dev에서 특정 commit 내용을 빼고 main에 배포해야 할 때 사용한다. 즉, 특정 부분만 제외하고 Cherry Pick 해서 배포용 브랜치에 반영한다. (release 할 때)


Cherry Pick 흐름

  • 아래 사진과 같이 특정 부분만 제외하고 Cherry Pick 할 수 있다.

  • dev의 브랜치에서 위의 사진과 같이 Cherry Pick 하여 다른 브랜치(배포용 브랜치)에 적용하고 해당 배포용 브랜치를 main 브랜치에 merge하면 아래 사진과 같이 main 브랜치가 변경된다.

  • 그후 dev 브랜치에서는 변경된 main에 맞춰 rebase를 진행하게되고 최종적으로는 아래와 같이 변경되는 것을 확인할 수 있다.

Cherry Pick 충돌

Cherry Pick 중단

git cherry-pick --abort 🟢Cherry Pick

를 입력하여 중단할 수 있다.


Cherry Pick 충돌 해결

아래 사진과 같이 충돌이 발생하면

각 파일에서 충돌을 해결한다.

git add . 🟢 충돌 해결 후 파일 저장
git cherry-pick --continue 🟢 Cherry Pick 완료

코드 되돌리기(rollback)

발생했던 오류들도 기록으로 남기는 것이 중요하기 때문에 남기는 것이 좋다.

Revert: 기존 오류 작업 Commit을 남겨두고 되돌리는 것
Reset: 이전 Commit 기록으로 되돌리는 것

💡 Reset을 누르면 아래와 같은 창이 뜬다.

상황에 따라 선택에서 Reset을 하면된다. ➡︎ 나중에 사용하게 될 경우 찾아서 적용


코드 임시 저장

stash
push를 해야할 때, 브랜치를 변경하고 싶을 때 현재 브랜치에 애매하게 변경된 사항들이 있거나 Commit을 하기 싫은 경우 stash를 이용해 코드를 임시 저장한다.

git stash 🟢임시 저장

git stach pop 🟢꺼내기

임시 저장된 코드를 꺼내고 싶을 때는 pop을 하면 된다.

profile
누워만 있지 말고 제발 뭐라도 하자.

2개의 댓글

comment-user-thumbnail
2025년 2월 25일

너무 좋은글 ^^ 잘봤습니다

1개의 답글