patch-id는 변경사항(git diff)을 해시화 한 값이다.
즉, 다른 브랜치 다른 커밋이더라도 변경 사항이 같으면 patch-id는 같다.
Tag git
git 체리픽을 하다보면 특정 커밋이 체리픽하는 브랜치에 포함되어있는지 헷갈릴때가 있다
commit id가 포함된 모든 브랜치 출력
git branch --contains {commitId}
# * develop
# feat/1
# feat/2
아래와 같이 브랜치 간 의존성이 연쇄적으로 존재할 때(A → B → C → D), 상위 브랜치의 PR이 수정사항과 함께 머지되면 하위 브랜치들에서 rebase 시 충돌이 발생할 수 있다. 이런 상황에서 효과적으로 rebase하는 방법을 알아본다.
👉 rebase가 동작하는 원리
문제 상황
[feature-a → main] feature-a 브랜치가 리뷰 후 A-1 commit 수정사항과 함께 main에 머지됨 (아래와 같은 상태)
간혹가다 rebase를 했을 때 current와 incoming이 헷갈리는 경우가 있는데 이를 정리한다.
rebase 전 브랜치
rebase 시
# feature 브랜치
git rebase main
rebase나 cherry-pick은 커밋의 변경사항(diff)을 적용한다는 공통점이 있다.
👉 rebase가 동작하는 원리
변경 사항은 patch-id로 구별할 수 있는데, 만약 patch-id가 동일한 커밋이 이미 존재한다면 해당 커밋은 제외되고 아래와 같은 메세지가 출력된다
👉 patch-id란?