힘내 스쿼시 모든 커밋

Abdul Jabbar 2023년6월20일
  1. 힘내 스쿼시
  2. Git Interactive Rebase를 사용하여 모든 커밋 스쿼시
힘내 스쿼시 모든 커밋

모든 개발자의 삶에서 스쿼시라는 단어는 Git 분산 제어 시스템으로 작업할 때 자주 사용됩니다. Git의 이 기능은 편리한 옵션이며 개발자 팀의 깔끔한 워크플로를 위해 개발자가 자주 사용합니다.

이 블록에서는 Git의 주요 기능인 Squashing에 대해 자세히 설명합니다. 또한 스쿼싱 프로세스와 개발자 팀과 함께 작업하는 동안 스쿼시가 필요한 이유.

힘내 스쿼시

먼저 스쿼시가 무엇인지 알아야 합니다. 일반적으로 squashing은 사용 가능한 모든 항목과 혼합하는 것입니다.

Git에서 스쿼시라는 용어는 명령줄을 사용하여 다양한 커밋을 하나의 커밋으로 결합하는 데 사용됩니다. 그리고 이 기능은 선입 선출 방식으로 올바른 순서로 항목을 유지합니다.

아래 예제를 통해 커밋의 스쿼싱 및 시퀀싱 순서를 설명하겠습니다.

     A ◄───── B ◄──── C ◄───── D


 After Squashing commits B, C, and D:

     A ◄───── E


  Commit E includes the commits B, C, and D changes.

모든 커밋을 새로운 커밋 E로 병합한다고 가정해 보겠습니다. 이제 커밋 E커밋 B, C 및 D에서 수행된 변경 사항을 포함합니다.

스쿼싱은 더 긴 수명 주기에서 가지 그래프를 깔끔하게 유지하기 위해 특별히 수행됩니다.

응용 프로그램의 새로운 기능으로 작업할 때 원하는 결과를 얻기 전에 몇 가지 커밋을 하는 것이 분명합니다. 이는 품질 보증 팀 또는 일부 테스트에서 보고된 버그의 일부 수정일 수 있습니다.

이러한 기능을 적용한 후 커밋으로 인해 브랜치를 지저분하게 보이게 만드는 불필요한 커밋을 수집했습니다. 이 시나리오에서는 해당 리포지토리 분기에서 스쿼싱을 사용합니다.

이러한 중복 커밋을 하나로 결합하는 데 도움이 됩니다.

여기서 기억해야 할 요점은 squash가 Git 명령이 아니라는 것입니다. 그러나 필수 Git 작업입니다.

git squash를 실행하면 오류가 발생합니다. 작업일 뿐이며 Git interactive rebase 명령을 통해 실행할 수 있기 때문입니다.

Git Interactive Rebase를 사용하여 모든 커밋 스쿼시

Git의 대화식 리베이스 기능을 사용하면 브랜치 수명 주기의 어느 시점에서든 원하는 시점에 커밋을 수동으로 스쿼시할 수 있습니다. 압축 커밋 로그를 보는 데 도움이 되는 별칭 slog를 사용하여 아래 명령을 실행하여 시작하겠습니다.

git config --global alias.slog = log --graph --all --topo-order --pretty='format:%h %ai %s%d (%an)'

출력:

$ git slog
* ac1sd5f 2022-02-11 11:09:15 +0600 Commit D (HEAD -> master) (test)
* 5dasq6f 2022-02-11 11:09:02 +0600 Commit C (test)
* 5asa04d 2022-02-11 11:09:02 +0600 Commit B (test)
* c40as62 2022-02-11 11:10:56 +0600 Commit A (test)
* 29awqc5 2022-02-11 11:10:33 +0600 BugFix #1 (test)
* 3asafeb 2022-02-11 11:10:19 +v Feature1 implemented (test)
* cbas10d 2022-02-11 11:26:19 +0600 Init commit (test)

여기에서 Git 명령 Interactive Rebase는 시퀀싱 순서와 함께 기본 편집기의 모든 관련 커밋도 표시합니다. 여기에서 이러한 커밋을 스쿼시하고 제어하고 Git 명령을 사용하여 편집기에 저장하려고 합니다.

다음은 마지막 X 커밋을 스쿼시하는 데 사용되는 명령입니다.

git rebase -i HEAD~[X]Copy

마지막 4개의 커밋을 스쿼시하고 싶기 때문에 위 명령에서 X 대신 4를 언급합니다.

git rebase -i HEAD~4Copy

마지막 X 커밋이라고 하면 헤드에서 맨 아래까지 마지막 x 커밋을 의미합니다.

대화형 리베이스의 결과로 Git의 기본 편집기가 시작되고 우리가 원하는 커밋을 하나의 커밋에 스쿼시하기 시작합니다. pick 명령으로 나열된 커밋은 스쿼시하려는 커밋입니다.

이제 커밋의 명령 선택을 s 또는 스쿼시로 변경하여 이러한 커밋이 스쿼시되도록 합니다.

그런 다음 변경 사항을 저장하고 편집기를 닫습니다. git rebase 작업은 지침에 따라 수행됩니다.

$ git rebase -i HEAD~4
[detached HEAD fa29cd5] Commit A
 Date: Tue Sep 04 11:10:11 2022 +0600
 1 file changed, 1 insertion(+), 1 deletion(-)
Successfully rebased and updated refs/heads/master.

리베이스가 성공적으로 수행되었습니다. 우리의 만족을 위해 다음과 같이 git slog 명령을 다시 한 번 실행하여 커밋 로그를 볼 수 있습니다.

$ git slog
* f9SAEd5 2022-05-22 4:09:02  +0600 Commit A (HEAD -> master) (test)
* 29aS6c5 2022-05-22 4:09:02  +0600 BugFix #1 (test)
* 34faseb 2022-05-22 4:09:02  +0600 Feature1 implemented (test)
* cbadw0d 2022-05-22 4:09:02  +0600 Init commit (test)

위의 출력 창에서 볼 수 있듯이 마지막으로 마지막 4개의 커밋이 하나로 압축되었으며 개발자가 4개의 서로 다른 커밋을 모두 단일 기능 커밋으로 쉽게 가져올 수 있었습니다.

작가: Abdul Jabbar
Abdul Jabbar avatar Abdul Jabbar avatar

Abdul is a software engineer with an architect background and a passion for full-stack web development with eight years of professional experience in analysis, design, development, implementation, performance tuning, and implementation of business applications.

LinkedIn

관련 문장 - Git Squash