콘텐츠로 건너뛰기
GitTree
역사와 회복

스쿼시 커밋

스쿼싱은 git rebase -i의 fixup 또는 squash와 같이 여러 커밋을 하나로 결합합니다. GitTree에서 모든 스쿼시는 먼저 Squash 대화 상자를 엽니다. 여기에는 접힌 커밋, 결과, 메시지 및 크레딧을 받은 사람이 표시되며 확인하기 전까지는 아무것도 변경되지 않습니다. 커밋되지 않은 작업은 절대 건드리지 않으며 Undo는 커밋을 다시 넣습니다.

무료업데이트됨

GitTree 무료로 작동: 로그인하면 모든 로컬 Git 기능이 제공됩니다.

이 페이지에서
  1. 시작하기 전에
  2. 어디서 찾을 수 있나요?
  3. 단계
  4. 예상되는 결과
  5. 스쿼시 방법
  6. 이미 푸시한 커밋
  7. 나중을 위한 수정 커밋
  8. 스쿼시 병합으로 작성자 유지
  9. 설정
  10. 뭔가 잘못되면
  11. 질문
  12. 관련된

시작하기 전에

  • 커밋은 체크아웃한 브랜치에 끊어지지 않은 한 줄로 있습니다. 선택 항목에는 병합 커밋이 포함될 수 없습니다. Squash Branch…할 수 있습니다.
  • 스쿼시된 커밋과 그 위의 모든 커밋은 새 ID를 얻습니다. 이미 밀어넣었다면 나중에 강제로 밀어야 합니다. 다른 원격 지점에 포함된 기록은 여기에서 압축할 수 없습니다.

어디서 찾을 수 있나요?

  • 그래프에서 두 개 이상의 커밋을 선택하고(범위를 보려면 Shift 키를 누른 채 클릭) Squash Commits…을 마우스 오른쪽 버튼으로 클릭합니다.
  • 하나의 커밋(Edit History › Squash into Parent… 또는 Fixup into Parent…)을 마우스 오른쪽 버튼으로 클릭합니다.
  • 그래프 또는 왼쪽 패널에서 체크아웃된 분기(Squash Branch…)를 마우스 오른쪽 버튼으로 클릭합니다.
  • Alt(Mac의 경우 ⌥)을 누른 채 커밋을 커밋 바로 위 또는 아래로 드래그합니다.
  • 커밋(Edit History › Create Fixup Commit…)을 마우스 오른쪽 버튼으로 클릭하여 수정 사항으로 준비된 내용을 커밋합니다.
  • 이들 모두는 명령 팔레트와 기능 가이드의 Squash 카드에도 있습니다.
액션macOSWindows 및 Linux
선택에 대한 Squash Commits…⌥SAlt+S
선택한 커밋에 대한 Squash into Parent…⌥QAlt+Q
체크아웃된 지점에 대한 Squash Branch…⌥⇧BAlt+Shift+B
Undo 스쿼시⌘ZCtrl+Z

단계

  1. 스쿼시 대화상자 열기

    위의 항목을 사용하십시오. 대화상자 이름은 스쿼시한 내용에 따라 지정됩니다(예: Squash 3 Commits, Squash a1b2c3d into Its Parent 또는 Squash Branch feature/login). 요약 줄은 "3개의 커밋이 1 · 12개 파일 · +240 −31 · Ada의 저작자를 유지합니다"와 같습니다.

  2. 접힌 커밋을 확인하세요.

    Commits that fold는 Result 아래에 가장 오래된 커밋을 나열합니다. 가장 오래된 커밋의 작성자가 작성한 커밋입니다. Squash Branch…의 경우 Base:는 분기가 베이스를 떠난 위치를 표시합니다. Change…를 사용하면 다른 분기, 태그 또는 커밋을 입력하고 계획을 다시 작성할 수 있습니다.

  3. 메시지를 선택하세요

    Start the message from에서 Combine Messages, Oldest Message, Newest Message, List of Commits 또는 Write My Own를 선택한 다음 원하는 대로 텍스트를 편집합니다. 요약 줄이 필요합니다.

  4. 다른 저자의 이름을 알려주세요

    다른 사람이 일부 커밋을 작성하면 Credit the other authors (Co-authored-by)는 각 커밋에 대해 Co-authored-by 줄을 추가합니다. 추가된 행은 그 아래에 나열됩니다. 제외하려면 선택을 취소하세요.

  5. 다른 변경 사항을 읽은 다음 스쿼시

    What else changes는 위의 커밋 중 새 ID를 얻는 커밋 수(변경 사항은 동일하게 유지됨)와 이전 커밋을 유지하는 다른 브랜치 또는 태그를 나타냅니다. Squash 3 Commits 또는 Squash into Parent와 같은 확인 버튼을 누르세요.

예상되는 결과

예를 들어 GitTree는 Undo 버튼이 있는 3 commits squashed into a1b2c3d.를 나타내며 그래프에는 여러 커밋이 있는 하나의 커밋이 표시됩니다.

스테이지된 변경 사항과 스테이지되지 않은 변경 사항 및 추적되지 않은 파일은 그대로입니다. 스쿼시는 작업 트리에 닿지 않습니다.

스쿼시 방법

각 스쿼시가 접는 것
명령어떤 접기
Squash Commits…체크아웃된 브랜치에서 선택한 커밋이 두 개 이상 나란히 있습니다.
Squash into Parent…그 아래 커밋에 하나의 커밋을 추가합니다.
Fixup into Parent…마찬가지로, 상위 메시지만 유지합니다(예: git rebase -i의 fixup).
Squash Branch…베이스를 떠난 이후의 브랜치의 모든 커밋은 병합을 포함하여 해당 베이스의 하나의 커밋으로 만들어집니다.
Alt-드래그드래그된 커밋과 이를 드롭한 이웃. 큐 Drop to squash …는 당신이 놓을 수 있는 위치를 보여줍니다. Esc 취소했습니다.

이미 푸시한 커밋

브랜치의 업스트림에 커밋이 있으면 대화 상자에 커밋이 표시되고 스쿼시되기 전에 I will force push … after squashing을 선택하라는 메시지가 표시됩니다. 그 후 메시지는 원격 분기가 마지막으로 본 위치에 있는 경우에만 원격 분기를 대체하는 Force Push…을 제공합니다(force push).

나중을 위한 수정 커밋

지금 아무것도 다시 작성하지 않고 이전 커밋을 수정하려면 변경 사항을 준비하고 해당 커밋에서 Create Fixup Commit…을 선택하세요. Fixup(메시지 유지), Squash(메모 추가) 또는 Amend(메시지를 New message로 대체)을 선택합니다. GitTree는 fixup!, squash! 또는 amend! 커밋을 커밋합니다. Arrange fixup!, squash! and amend! commits가 포함된 대화형 리베이스가 접혀 있습니다.

스쿼시 병합으로 작성자 유지

Squash into staged changes (no commit)을 사용하여 브랜치를 병합하면 빈 커밋 상자에 작성자에 대한 Co-authored-by 줄과 함께 가져오는 커밋을 나열하는 메시지가 표시됩니다. 이미 작성한 메시지는 보관됩니다.

설정

기본 설정 › General에서 Squash: starting message는 대화 상자가 시작되는 메시지를 선택하고 Squash: credit co-authors는 크레딧 시작 선택 여부를 설정합니다. 각 스쿼시는 여전히 두 가지를 모두 변경할 수 있습니다.

뭔가 잘못되면

"커밋이 서로 인접해 있지 않습니다. 중단되지 않은 실행을 선택하세요."

체크아웃된 브랜치에서 서로 이어지는 커밋을 선택하거나 전체 브랜치에 대해 Squash Branch…를 사용하세요.

"병합 커밋은 접힐 수 있습니다. Squash Branch… 접힌 병합은 가능하지만 선택 항목은 접을 수 없습니다."

커밋별 커밋을 선택하려면 Squash Branch… 또는 대화형 리베이스를 사용하세요.

"... 다음 커밋이 포함되어 있습니다. 공유된 기록이므로 여기에서 압축할 수 없습니다."

다른 원격 지점에도 있습니다. 명령줄에서 공유 기록을 다시 작성하기 전에 그대로 두거나 팀의 의견에 동의하세요.

스쿼시는 오류와 Review Again 버튼으로 인해 중지됩니다.

대화 상자가 열려 있는 동안 분기가 변경되었으므로 아무것도 찌그러지지 않았습니다. Review Again을 눌러 새 계획을 확인한 다음 다시 스쿼시하세요.

질문

스쿼시 실행을 취소하려면 어떻게 해야 하나요?

메시지나 툴바에서 Undo를 누르세요. GitTree는 브랜치를 이동하기 전에 refs/ogt/trash 아래에 이전 커밋을 보관했기 때문에 원래대로 정확하게 돌아옵니다.

압축된 커밋에 누구의 이름이 있나요?

날짜와 함께 접힌 가장 오래된 커밋의 작성자입니다. 당신은 커미터입니다. 다른 모든 사람의 크레딧을 유지하려면 Credit the other authors (Co-authored-by)을(를) 켜세요.

스쿼싱이 커밋 후크를 실행하거나 작업 파일을 건드리나요?

아니요. GitTree는 git rebase가 내부적으로 수행하는 방식으로 새 커밋을 직접 작성하며 작업 트리의 색인이나 파일을 변경하지 않습니다. Git 구성에서 서명된 커밋을 요청할 때 서명합니다.