같은 커밋을 가리키는 태그인데 rev-parse 해시가 다르다
같은 커밋에 붙인 lightweight·annotated 태그의 기본 해시가 다른 이유를 객체 종류로 확인한다. rev-parse, cat-file -t, show-ref --dereference의 실제 출력을 읽고, 양쪽을 ^{commit}으로 조회해 커밋 ID를 비교한다.
빌드노트
Git·개발 도구 카테고리의 글입니다.
총 48개의 글
같은 커밋에 붙인 lightweight·annotated 태그의 기본 해시가 다른 이유를 객체 종류로 확인한다. rev-parse, cat-file -t, show-ref --dereference의 실제 출력을 읽고, 양쪽을 ^{commit}으로 조회해 커밋 ID를 비교한다.
기능 버그를 찾는 bisect에서 무관한 빌드 실패를 bad로 표시하면 엉뚱한 커밋으로 범위가 줄어든다. 합성 이력에서 종료 코드 1과 125의 결과를 비교하고, skip 뒤에도 후보가 C2·C3·C4로 남은 경우와 판단 기준을 설명한다.
rebase 충돌의 ours는 upstream부터 재적용한 쪽이다. 같은 파일의 merge·rebase stage 1·2·3을 비교하고, 현재 커밋과 두 버전을 읽어 충돌 밖의 수정까지 보존하는 해결 순서를 확인한다.
main에만 추가한 파일이 두 점 diff에서는 삭제로 보이고 GitHub PR에서는 빠질 수 있다. 같은 분기에서 두 끝점 비교와 공통 조상 기준 비교의 patch·파일 목록·방향성을 확인하고, 리뷰 목적에 맞는 명령을 고른다.
같은 브랜치로 worktree를 만들다 거절되면 오류의 기존 경로와 worktree 목록을 맞춰 본다. 실제 실험으로 기존 폴더·새 브랜치·detached HEAD의 차이와 미커밋 수정이 새 폴더에 따라가지 않는 조건을 확인한다.
PowerShell 배열의 -eq는 Boolean 대신 일치한 원소를 반환한다. 0이나 빈 문자열 하나가 남으면 if는 거짓이고, 같은 값이 두 개 남으면 참이 된다. 실제 타입과 개수를 비교하고 존재 여부를 -contains 또는 결과 개수로 판별하는 방법을 설명한다.
대소문자만 다른 name과 Name은 유효한 JSON에서도 PowerShell의 기본 객체 변환을 실패시킬 수 있다. PowerShell 7.6.6에서 -AsHashtable의 키·값·왕복 결과를 확인하고, 철자까지 같은 중복 키와 구분한다.
git switch 뒤에도 수정이 남는 이유를 작업 파일과 커밋 내용으로 구별한다. 독립 저장소에서 전환 성공·거부와 HEAD 보존을 확인하고, 이동 전에 commit 또는 stash로 변경을 보존할 기준을 설명한다.
PowerShell 7에서 JSON 배열을 파이프로 왕복 변환하면 빈 배열은 출력이 없어지고 한 원소 배열은 객체가 될 수 있다. NoEnumerate와 직접 InputObject 전달을 비교하고, 변수를 다시 파이프로 보낼 때 생기는 열거와 버전 차이를 확인한다.
squash로 변경을 반영해도 작업 커밋은 main의 조상이 되지 않는다. 같은 트리를 만든 일반 merge와 부모·공통 조상·--merged를 비교하고, 변경 없는 재병합과 같은 줄을 다시 수정한 후속 병합의 차이를 확인했다.
Windows에서 파일명 대소문자만 바꾼 뒤 폴더와 Git 인덱스의 철자가 달라지는 상태를 실제로 확인했다. 두 경로와 core.ignorecase를 조회하고, 충돌 없는 임시 이름을 거친 git mv로 새 철자를 스테이징하는 방법을 설명한다.
fetch --prune 뒤 남은 topic이 로컬 브랜치인지 원격 추적 참조인지 확인한다. 표준 refspec에서의 정리 범위와 로컬 커밋·HEAD 보존을 비교하고, 로컬 삭제 전 남은 작업을 확인하는 명령을 설명한다.