Subtree로 가져온 upstream history를 git shallow로 잘라내기

배경

.git/shallow vs .git-blame-ignore-revs

.git-blame-ignore-revs .git/shallow
영향 범위 git blame 거의 모든 git 연산
커밋 존재 여부 그대로 있음 경계 너머는 잘림
목적 blame 노이즈 제거 history truncate / 속도
위치 repo 루트 (커밋됨) .git/ 내부 (로컬만)
공유 팀과 공유 로컬 전용

속도 목적이면 .git/shallow가 맞는 도구.

subtree merge 커밋의 구조

1fe16b560bb03dd610fe272e3e3515ad6c2498a7git subtree add(no squash) 머지 커밋이라면, 두 개의 부모를 가짐:

자르고 싶은 건 부모2 쪽 체인뿐이므로, 부모2 SHA를 .git/shallow에 넣는다. 그러면 머지 커밋과 부모1 쪽은 그대로 살고 upstream만 잘림.

절차

0. 백업 (필수)

cp -r .git .git.backup

문제 생기면 rm -rf .git && mv .git.backup .git로 원복.

1. 머지 커밋의 부모 확인

git rev-list --parents -n 1 1fe16b560bb03dd610fe272e3e3515ad6c2498a7
# 출력: <self> <parent1> <parent2>

각 부모 쪽 깊이 체크: