1. Git merge (병합)
- 목적: 두 개 이상의 브랜치를 병합하여 작업을 통합.
- 동작 방식:
- merge 명령은 두 브랜치를 통합할 때 **새로운 병합 커밋(merge commit)**을 생성합니다.
- 병합 커밋은 두 브랜치의 변경사항을 결합하고, 히스토리에 브랜치가 병합된 시점을 표시합니다.
- 장점:
- 기존 브랜치 히스토리를 보존하고 병합 이력을 명확히 남깁니다.
- 협업 시 브랜치 간 작업 흐름을 쉽게 추적할 수 있습니다.
예시:
1. [파란색 main] 'git 정리하게 다시' 기준으로 bgr 브랜치 생성
2. [파란색 main] 1. 기능추가 커밋 추가 후 푸시까지
3. [핑크색 bgr] 기능 추가 커밋 추가 후 푸시까지
4. [파란색 main] 브랜치에 bgr 기능추가를 병합함
5. 맨위에 Merge branch : 새로운 병합 커밋 생성
2. Git rebase
- 목적: 브랜치의 변경사항을 특정 브랜치 위에 **재배치(reapply)**하여 히스토리를 정리합니다.
- 동작 방식:
- rebase 명령은 원래 브랜치의 커밋을 새로운 커밋으로 재작성하여 지정된 브랜치 위에 올려놓습니다.
- 브랜치 히스토리가 "직선화"되어 마치 브랜치가 그 위에서 직접 작업된 것처럼 보입니다.
- 장점:
- 깔끔한 히스토리를 유지하며, 브랜치 병합 시 불필요한 병합 커밋을 피할 수 있습니다.
- 커밋 이력을 간결하게 관리할 수 있습니다.
- 저장소를 최신 상태로 유지 : 리베이스는 마스터 브랜치나 다른 개발 브랜치에 대한 최신 수정 사항으로 기능 브랜치를 업데이트 하는 방법입니다. 이를 통해 코드 업데이트가 최신 코드 베이스버전을 기반으로 하는지 확인하기가 더 쉬워집니다.
- 예시:
# feature 브랜치를 master 브랜치 위로 리베이스
git checkout featuregit rebase master- 이 명령은 feature 브랜치를 master의 최신 커밋 위로 재배치하여 새로운 커밋을 생성합니다.
- 이 명령은 feature 브랜치를 master의 최신 커밋 위로 재배치하여 새로운 커밋을 생성합니다.
- 주의사항:
- rebase는 커밋 이력을 재작성하기 때문에, 이미 공유된 브랜치에서 사용 시 동료들과의 협업에 혼란을 초래할 수 있으니 주의가 필요합니다.
Before
- rebase는 커밋 이력을 재작성하기 때문에, 이미 공유된 브랜치에서 사용 시 동료들과의 협업에 혼란을 초래할 수 있으니 주의가 필요합니다.
main으로 bgr_rebase를 rebase해서 사랑이란 유리 같은것으로 교체됨 .
3. Git squash
- 목적: 여러 개의 커밋을 하나의 커밋으로 합쳐서 깔끔한 커밋 이력을 만들기 위해 사용됩니다.
- 동작 방식:
- rebase 명령의 인터렉티브 모드(git rebase -i)에서 squash를 사용하여 여러 커밋을 하나로 합칠 수 있습니다.
- 합쳐진 커밋의 메시지를 편집할 수 있으며, 히스토리를 정리하는 데 유용합니다.
- 장점:
- 작업 히스토리를 정리하여 의미 있는 커밋 하나로 합칠 수 있습니다.
- 여러 번의 작은 커밋을 하나로 합쳐 PR(Pull Request)을 깔끔하게 정리할 수 있습니다.
- 예시:
- 최근 3개의 커밋을 스쿼시하려면:
git rebase -i HEAD~3
- 에디터가 열리면 합치고 싶은 커밋을 squash 또는 s로 표시합니다:
pick a1b2c3 Commit message 1
squash d4e5f6 Commit message 2
squash g7h8i9 Commit message 3 - 커밋 메시지를 편집하여 저장하면 세 개의 커밋이 하나로 합쳐집니다.
- 최근 3개의 커밋을 스쿼시하려면:
기능별 비교 요약
- merge:
- 병합 커밋을 생성하여 브랜치와 병합 이력을 유지.
- 히스토리를 보존하며 병합 과정을 명확하게 보여줌.
- rebase:
- 브랜치의 변경사항을 지정된 브랜치 위로 재배치.
- 히스토리가 직선화되며 깔끔하고 간결하게 관리 가능.
- squash:
- 여러 개의 커밋을 하나로 합쳐서 의미 있는 단일 커밋으로 정리.
- 주로 rebase -i와 함께 사용하여 히스토리를 정리.
언제 사용해야 할까?
- **merge**는 브랜치를 명확히 병합하고 병합 기록을 유지하고자 할 때.
- **rebase**는 히스토리를 직선화하고 깔끔하게 유지하고자 할 때.
- **squash**는 여러 커밋을 하나의 단일 커밋으로 합쳐 커밋 내역을 정리하고자 할 때.
이 세 가지 기능을 목적에 맞게 사용하면 Git 히스토d리를 관리하고 협업하는 데 있어 큰 도움이 됩니다.
1. Git에서 rebase와 merge의 차이점은 무엇인가요?
답변:
두 개의 서로 다른 브랜치를 병합하려면 git merge를 사용하고, 한 브랜치의 변경 사항을 다른 브랜치에 통합하려면 git rebase를 사용합니다.
2. git cherry-pick과 rebase의 차이점은 무엇인가요?
답변:
Cherry-pick은 주어진 커밋의 변경 사항을 현재 브랜치에 적용합니다. git rebase를 사용하면 한 브랜치의 변경 사항을 다른 브랜치에 통합할 수 있습니다.
작성중!
반응형
'프로그래밍' 카테고리의 다른 글
큰 수의 법칙, 수학적 확률, 통계적 확률 🎲 (0) | 2024.11.17 |
---|---|
[AWS] RDS - Single-AZ, Multi-AZ (0) | 2024.07.03 |
서버 모니터링툴 구축 (0) | 2024.06.07 |
게임 클라이언트 프로그래머 ? 게임 서버 프로그래머 ? (4) | 2024.01.08 |
bash scripts option 정리 (0) | 2023.05.17 |
댓글