Git에서 이미 푸시된 스쿼시 커밋

John Wachira 2024년2월15일
Git에서 이미 푸시된 스쿼시 커밋

이 문서에서는 이미 원격 저장소에 푸시한 커밋을 스쿼시하는 프로세스에 대해 설명합니다. 저장소의 혼란을 줄이기 위해 커밋을 하나로 스쿼시합니다.

커밋을 스쿼시하기 위해 대화형 모드에서 git rebase를 실행합니다.

Git에서 이미 푸시된 스쿼시 커밋

더 쉬운 컨텍스트를 위해 변경 사항을 푸시한 후 몇 개의 커밋을 하나로 스쿼시해야 하는 시나리오를 시뮬레이션합니다.

먼저 현재 변경 사항을 원격 저장소에 푸시합니다.

$ git push origin Dev2.1

이 명령은 모든 변경 사항을 원격 브랜치 Dev2.1에 푸시합니다.

5번째 커밋까지 git rebase 명령을 실행할 수 있습니다.

$ git rebase -i HEAD~5

출력:

git rebase

커밋을 스쿼시하기 위해 커밋 시작 부분에서 picksquash로 바꾸고 리베이스를 완료합니다.

git log 명령을 실행하여 커밋 기록을 볼 수 있습니다.

git log

푸시를 시도하면 아래와 같이 오류가 발생합니다.

오류

오류는 자명합니다. 우리는 그것에 대해 많이 생각하지 않을 것입니다.

--force 플래그가 아니라 아래와 같이 푸시를 강제해야 합니다.

$ git push origin +Dev2.1

출력:

git push origin

GitHub의 원격 저장소를 간단히 살펴보겠습니다.

GitHub의 원격 저장소

refspec 앞에 +를 사용하여 Dev2.1 브랜치로 강제 푸시합니다.

결론적으로 이미 원격으로 푸시한 커밋을 스쿼시한 후에는 일반적인 git push가 소용이 없습니다.

Git이 푸시하기 전에 당겨야 하는 성가신 루프에 갇히게 될 것입니다. git push origin 명령에서 분기 앞에 +를 추가하면 문제가 해결됩니다.

작가: John Wachira
John Wachira avatar John Wachira avatar

John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.

LinkedIn

관련 문장 - Git Squash