HOWTO · Git
Git에서 이미 푸시된 스쿼시 커밋
원격 저장소에 이미 푸시된 커밋을 스쿼시할 수 있습니다.
이 문서에서는 이미 원격 저장소에 푸시한 커밋을 스쿼시하는 프로세스에 대해 설명합니다. 저장소의 혼란을 줄이기 위해 커밋을 하나로 스쿼시합니다.
커밋을 스쿼시하기 위해 대화형 모드에서 git rebase를 실행합니다.
Git에서 이미 푸시된 스쿼시 커밋
더 쉬운 컨텍스트를 위해 변경 사항을 푸시한 후 몇 개의 커밋을 하나로 스쿼시해야 하는 시나리오를 시뮬레이션합니다.
먼저 현재 변경 사항을 원격 저장소에 푸시합니다.
$ git push origin Dev2.1
이 명령은 모든 변경 사항을 원격 브랜치 Dev2.1에 푸시합니다.
5번째 커밋까지 git rebase 명령을 실행할 수 있습니다.
$ git rebase -i HEAD~5
출력:

커밋을 스쿼시하기 위해 커밋 시작 부분에서 pick을 squash로 바꾸고 리베이스를 완료합니다.
git log 명령을 실행하여 커밋 기록을 볼 수 있습니다.

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

오류는 자명합니다. 우리는 그것에 대해 많이 생각하지 않을 것입니다.
--force 플래그가 아니라 아래와 같이 푸시를 강제해야 합니다.
$ git push origin +Dev2.1
출력:

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

refspec 앞에 +를 사용하여 Dev2.1 브랜치로 강제 푸시합니다.
결론적으로 이미 원격으로 푸시한 커밋을 스쿼시한 후에는 일반적인 git push가 소용이 없습니다.
Git이 푸시하기 전에 당겨야 하는 성가신 루프에 갇히게 될 것입니다. git push origin 명령에서 분기 앞에 +를 추가하면 문제가 해결됩니다.