글을 쓰게 된 배경
평소 git push를 자주 사용하지만, 출력되는 메시지의 의미를 제대로 이해하지 못했습니다.
이번 기회에 각 메시지가 의미하는 바를 상세히 알아보고, 예상치 못한 상황에서의 대처 방법까지 정리해보았습니다.
git push origin [branch] 입력하면 나오는 내용:
Enumerating objects: 605, done.
Counting objects: 100% (605/605), done.
Delta compression using up to 8 threads
Compressing objects: 100% (580/580), done.
Writing objects: 100% (605/605), 255.34 KiB | 9.46 MiB/s, done.
Total 605 (delta 315), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (315/315), done.
remote:
remote: Create a pull request for 'feat/cyw' on GitHub by visiting:
remote: https://github.com/pickup-basketball/pickup-basketball-rn-app/pull/new/feat/cyw
remote:
remote: Heads up! The branch 'feat/cyw' that you pushed to was renamed to 'main'.
remote:
To https://github.com/pickup-basketball/pickup-basketball-rn-app.git
* [new branch] feat/cyw -> feat/cyw
각 메시지 해석
1. Enumerating objects: 605, done.
- Git이 푸시할 객체(object) 개수를 세고 있음
- 총 605개의 객체(파일 변경 사항, 커밋 정보 등)를 찾아서 처리할 준비가 완료됨
2. Counting objects: 100% (605/605), done.
- 푸시할 객체 개수를 최종적으로 확인하는 과정
- 총 605개 객체를 푸시할 것임
3. Delta compression using up to 8 threads
- Git이 변경된 부분(델타, delta)을 효율적으로 압축하기 위해 최대 8개의 CPU 스레드를 사용함
- 델타 압축(delta compression)이란 이전 버전과의 차이점만 저장하는 방식을 의미
4. Compressing objects: 100% (580/580), done.
- 푸시할 580개 객체를 압축 완료
- 원래 605개였는데, 그중에서 델타 압축을 적용할 수 있는 580개를 압축한 것
5. Writing objects: 100% (605/605), 255.34 KiB | 9.46 MiB/s, done.
- 압축된 객체를 원격 저장소(GitHub)에 255.34KB 크기로 전송
- 전송 속도: 9.46MB/s
- 총 605개 객체를 모두 기록(writing) 완료
6. Total 605 (delta 315), reused 0 (delta 0), pack-reused 0
- 푸시된 총 객체 수: 605개
- 315개 객체는 델타 방식으로 전송(이전 커밋과 비교해 변경된 부분만 푸시됨)
- reused 0, pack-reused 0: 로컬에서 캐시된 기존 객체를 재사용하지 않고 모든 객체를 새로 전송했다는 의미
7. remote: Resolving deltas: 100% (315/315), done.
- 원격 저장소(GitHub)에서 푸시된 변경 사항을 적용하면서 델타(차이점)를 병합하고 있음
- 315개의 변경된 객체(델타)를 적용 완료
8. remote:
- GitHub의 원격 저장소에서 발생한 메시지를 표시
9. remote: Create a pull request for 'feat/cyw' on GitHub by visiting:
- GitHub에서 feat/cyw 브랜치로 푸시했으니, PR(Pull Request)을 생성하라고 안내하는 메시지
- 제공된 링크를 클릭하면 PR 생성 페이지로 이동 가능
10. remote: Heads up! The branch 'feat/cyw' that you pushed to was renamed to 'main'.
- 중요! GitHub에서 feat/cyw 브랜치를 자동으로 main 브랜치로 변경했다는 의미
- 즉, feat/cyw라는 브랜치는 없어지고, main 브랜치로 푸시됨
- 푸시된 원격 저장소 주소
- pickup-basketball/pickup-basketball-rn-app 리포지토리에 푸시됨
12. * [new branch] feat/cyw -> feat/cyw
- 새로운 브랜치(feat/cyw)가 원격 저장소에도 생성됨
🛠️ 결론: 무슨 일이 벌어진 것인가?
- feat/cyw 브랜치를 GitHub에 push 함
- 605개의 객체를 압축해서 보냈고, 315개는 변경된 부분만 델타로 전송됨
- GitHub에서 feat/cyw 브랜치를 main으로 자동 변경함
- GitHub에서 PR을 만들라고 안내하고 있음
⚠️ 주의할 점
- 원래 feat/cyw 브랜치를 푸시했는데, GitHub에서 자동으로 main 브랜치로 바꿔버림
- 원격에서 브랜치가 강제로 바뀌었으니, 로컬에서도 git fetch 후 main을 체크아웃해서 확인하는 게 좋음
현재 상황 분석
- feat/cyw 브랜치를 푸시했는데 자동으로 main 브랜치로 변경됨
- 이는 일반적이지 않은 상황
왜 이런 일이 발생했나?
- GitHub 저장소 설정에서 브랜치 보호 규칙이나 자동 브랜치 리네이밍 규칙이 설정되어 있을 가능성이 높음
- 또는 저장소 관리자가 특별한 정책을 설정했을 수 있음
해결 방법
a) 즉시 할 일
Trouble Shooting Guide
b) 장기적 해결
- 저장소 관리자에게 문의하여 브랜치 자동 리네이밍 정책 확인
- GitHub 저장소 설정에서 브랜치 보호 규칙 확인
- 팀의 브랜칭 전략과 정책 재확인
참고 문서