1. Git
프로젝트 하면서 깃을 진짜 많이 사용해 본 것 같다.
이에 크고 작은 오류들, 모르는것들이 많이 있었는데 그 중 Rebase와 Merge에 대해 정리해 보려고 한다.
2. Rebase, Merge
Rebase : | Fork 해온 프로젝트를 Upstream에 맞게 동기화 하고 싶을 때 사용한다. 정보를 Fetch Upstream을 통해 가져오고 Rebase를 통해 병합한다. |
Merge : | 얘는 Upstream이 없고 Origin만 있는 상태에서 Git을 관리할 때 사용했었던 방법이다. |
3. Rebase와 Merge의 동작원리
흰색이 Main Branch, 노란색이 Sub Branch입니다.
Merge
: Main브랜치에서 Sub브랜치로 $git merge로 병합을 실행한다.
master에서 merge를 실행하면 master브랜치의 HEAD에 새홉게 커밋이력이 생성된다.
이처럼 merge는 실행한 브랜치로 병합을 실행하고 새로운 커밋이력을 생성하는 것을 확인할 수 있다.
이 때, main브랜치와 sub브랜치가 같은 부분을 건드리면 conflict가 발생하는데 이 때에는 충돌난 부분을 직접 고쳐주고 다시 add -> commit을 실행시켜주면 된다.
Rebase
: 새롭게 둥지를 튼다는 느낌으로 이해하면 쉽다.
main브랜치에서 sub브랜치를 $git rebase를 실행하면
main브랜치에서 sub브랜치를 기준으로 rebase를 시켰기 때문에 sub브랜치를 베이스로 커밋 이력이 정렬된다.
rebase는 특정 브랜치를 base로 커밋 이력을 재정렬하겠다는 명령어이다.
※ 주의할 점은 재정렬된 커밋이력에 (-1)이 추가되면서 해쉬 ID가 바뀐다. 재정렬되는 commit이력이기 때문에, 이전의 이력과는 다른 새로운 해쉬ID가 부여된다.
4. 간단한 커밋이력 관리법
: main브랜치에서 다른브랜치로 rebase는 지양하는 것이 좋다.
- main브랜치로 부터 sub브랜치를 생성하고 작업한다.
: main브랜치로부터 그냥 브랜치를 생성하고 작업을 하면 된다. - $git checkout sub을 실행한다.
: main을 기준으로 rebase를 실행하기 위해 작업단위를 이동한다. - $git rebase main을 실행한다.
: main을 기준으로 rebase를 실행하면 main을 기준으로 sbu브랜치의 이력들이 정리된다. - $git checkout main을 실행한다.
: 중요한점이 왜 rebase만 실행하면 되는데 다시 main으로 이동할까?
- > 현재 작업은 sub브랜치 위에서의 이력을 정리하기 위한 작업이다. main을 기준으로 정렬된 이력을 main에 반영해야 한다. - $git merge sub으로 최종내역을 master브랜치에 반영한다.
: 지금까지 작업한 내용을 main브랜치에 반영하여야 마지막 작업이 완료된다.
이러면, sub브랜치와 main브랜치의 작업들이 같은 작업 트리로 동기화가 완료된다.
대표적인 3가지 merge전략
: merge, rebase and merge, squash and merge 3가지 이다.
커밋 히스토리(Commit History)
: 팀과 일 하는 개발자의 입장에서 코딩, 깃, 커밋등의 약속을 정해서 작업을 한다.
이때 약속을 정해서 규칙을 잘 정해놓으면 커밋 메세지를 보고 어떤 내용이 변경되었는지 한 눈에 파악하기 위함이다.
커밋 히스토리를 잘 관리해야 버그등의 수정 내역이나 변경사항을 찾는 시간이 줄어듭니다.
'Basic > Git' 카테고리의 다른 글
[GitHub] Github 코드리뷰 알람 문제 (1) | 2023.08.09 |
---|