Git 스쿼시 브랜치의 모든 커밋

Stewart Nguyen 2023년1월30일
  1. Git 소프트 리셋 변경 사항
  2. 변경 사항을 다시 추가
  3. 저지르다
Git 스쿼시 브랜치의 모든 커밋

이 기사에서는 단일 커밋으로 완료된 모든 커밋을 스쿼시하는 방법을 설명합니다.

기능 브랜치에서 많은 커밋을 수행했다고 가정하고 이제 이 브랜치의 모든 커밋을 하나의 커밋으로 그룹화하여 정리해야 합니다. Git은 이를 스쿼싱(squashing)이라고 합니다.

모든 커밋을 스쿼시하는 아이디어는 다음과 같습니다.

  1. 소프트 리셋으로 모든 변경 사항을 리셋합니다.
  2. 변경 사항을 다시 추가합니다.
  3. 새 메시지로 커밋합니다.

Git 소프트 리셋 변경 사항

소프트 리셋은 새로 추가된 파일을 제거하지 않으면서 모든 커밋을 취소합니다.

그렇게 하려면 기능 브랜치가 기반으로 하는 원본 커밋을 찾아야 합니다. 이는 일반적으로 main과 같은 원본 브랜치의 이름입니다.

$ git log
commit a856ee456967a942ab379b27a4839962f88b92ce (HEAD -> feature/long-features)
Author: Cuong Nguyen
Date:   Mon Dec 27 20:53:18 2021 +0700

    Feature 2.3

commit 6f1599a18691906ed148dc40d2d290aaeceeaa5c
Author: Cuong Nguyen
Date:   Mon Dec 27 20:53:03 2021 +0700

    Subfeature 2

commit 94e35bae85f395c62fdaaa1aeaedbb11d2c94375
Author: Cuong Nguyen
Date:   Mon Dec 27 20:52:39 2021 +0700

    Subfeature 1

commit 9265e3bd97863fde0a13084f04163ceceff9a9d0 (grafted, tag: v1.0.0, branch-off-from-tag-v1.0.0)
Author: Cuong Nguyen
Date:   Sun Dec 19 19:33:07 2021 +0700

    Merge pull request #1 from stwarts/feature/shared-branch

이 예에서 feature/long-features 브랜치가 커밋 SHA 9265e3bd97863fde0a13084f04163ceceff9a9d0(또는 브랜치 이름 branch-off-from-tag-v1.0.0에서 체크아웃되었습니다.

모든 수정 사항을 재설정하려면 git reset --soft 9265e3bd97863fde0a13084f04163ceceff9a9d0 또는 git reset --soft branch-off-from-tag-v1.0.0을 사용하십시오.

$ git reset --soft 9265e3bd97863fde0a13084f04163ceceff9a9d0
$ git status
On branch feature/long-features
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   sub_feature_1.txt
	new file:   sub_feature_2.txt

--soft 옵션은 커밋을 재설정하고 새 파일을 유지하도록 git을 지정합니다.

변경 사항을 다시 추가

git add -A는 사용할 명령입니다.

-A 옵션은 모든 변경 사항이 추가되도록 지정합니다.

저지르다

마지막 단계는 git commit -m <message>를 사용하여 새 커밋을 생성하는 것입니다.

$ git commit -m 'Squash 3 commits into 1'
[feature/long-features 8cc336c] Squash 3 commits into 1
 2 files changed, 2 insertions(+)
 create mode 100644 sub_feature_1.txt
 create mode 100644 sub_feature_2.txt
$ git log
commit 8cc336c6d1b2e6ed55470f99b040d6835ec655e5 (HEAD -> feature/long-features)
Author: Cuong Nguyen <cuong.nguyen@oivan.com>
Date:   Mon Dec 27 21:07:54 2021 +0700

    Squash 3 commits into 1

commit 9265e3bd97863fde0a13084f04163ceceff9a9d0 (grafted, tag: v1.0.0, branch-off-from-tag-v1.0.0)
Author: Nguyễn Phú Cường <npcuong.011308@gmail.com>
Date:   Sun Dec 19 19:33:07 2021 +0700

    Merge pull request #1 from stwarts/feature/shared-branch

관련 문장 - Git Squash