HOWTO · Git

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 명령에서 분기 앞에 +를 추가하면 문제가 해결됩니다.