Git 가이드
GUI의 Git 대화형 리베이스: 스쿼시, 수정, 단어 변경, 재정렬 및 커밋 삭제
대화형 리베이스 GUI를 사용하여 커밋을 스쿼시, 수정, 단어 변경, 재정렬 및 삭제하는 방법, git rebase -i에서 각 작업이 수행하는 작업, 잘못된 리베이스를 실행 취소하는 방법.

대화형 리베이스 GUI를 사용하면 텍스트 파일 대신 목록에서 브랜치의 커밋을 다시 작성할 수 있습니다. 시작 커밋을 선택하고 그 위의 모든 커밋에 작업(선택, 스쿼시, 수정, 다시 작성, 편집 또는 삭제)을 부여하고 새 순서로 끌어서 Git이 재생하도록 합니다. git rebase -i과 동일한 작업을 실행하므로 결과는 명령줄과 동일합니다. GitTree에서 변경하려는 커밋 바로 아래에 있는 커밋을 마우스 오른쪽 버튼으로 클릭하고 Interactive Rebase of the Commits Above...를 선택한 다음 작업을 설정하고 Start Rebase를 클릭합니다. 결과가 잘못된 경우 Undo는 분기를 다시 되돌립니다.
이 대화형 리베이스 튜토리얼에서는 각 작업, 커밋을 스쿼시하는 세 가지 방법, 일치하는 명령, 자동 스쿼시 및 안전망을 다룹니다. 스크린샷에는 macOS, Windows 및 Linux용 Git 클라이언트인 GitTree의 대화형 리베이스 편집기가 표시되어 있지만 Git 동작은 모든 도구에서 동일합니다.
Git 대화형 리베이스의 기능과 사용 시기
일반적인 리베이스는 일련의 커밋을 새 베이스로 이동합니다. 대화형 리베이스를 사용하면 도중에 해당 시리즈를 편집할 수도 있습니다. Git은 재생하려는 커밋을 표시하고 목록을 변경하면 Git이 일치하도록 브랜치를 다시 빌드합니다. 다시 작성된 모든 커밋은 새로운 ID를 가지므로 대화형 리베이스는 작업을 공유하기 전에 단계에 속합니다. 이를 추구하는 일반적인 이유:
- 끌어오기 요청을 열기 전에 "wip", "오타 수정" 및 "주소 검토" 커밋을 하나의 의미 있는 커밋으로 스쿼시하세요.
- 오타, 티켓 번호 누락 또는 모호한 요약이 있는 커밋 메시지를 바꿔보세요.
- 잊어버린 변경 사항을 해당 커밋에 포함시켜 모든 커밋이 자체적으로 빌드되도록 합니다.
- 리팩터링이 의존하는 기능보다 먼저 실행되도록 커밋을 재정렬합니다.
- 메인 브랜치에 도달해서는 안 되는 디버깅 커밋이나 실험을 삭제하세요.
선택, 스쿼시, 수정, 수정, 편집 및 삭제: 리베이스 작업 설명
대화형 리베이스 계획의 모든 라인은 하나의 커밋과 하나의 작업으로 구성됩니다. 다음은 매일 사용하게 될 것입니다(Git의 할일 파일에는 exec 및 break와 같은 스크립팅을 위한 몇 가지 추가 항목이 있습니다).
| 액션 | GitTree를 입력하세요 | Git이 하는 일 | 그것을 사용하여 |
|---|---|---|---|
| 고르다 | 피 | 커밋을 그대로 유지합니다. | 커밋을 그대로 둡니다(기본값). |
| 다시 말하다 | 아르 | 변경 사항을 유지하고 새 메시지를 작성할 수 있습니다. | 오타나 모호한 요약을 수정하세요. |
| 편집하다 | 전자 | 커밋을 재생한 다음 수정할 수 있도록 중지합니다. | 커밋을 분할하거나 해당 파일을 변경합니다. |
| 스쿼시 | 초 | 커밋을 위의 커밋에 결합하고 두 메시지를 결합합니다. | 관련 커밋에 참여하고 메모를 보관하세요. |
| 수정 | 에프 | 커밋을 위의 커밋에 병합하고 이전 메시지만 유지합니다. | 조용히 작은 수정으로 접습니다. |
| 수정 -C | 작업 메뉴: "수정, 메시지 사용" | 수정과 유사하지만 대신 이 커밋의 메시지를 유지합니다. | 수정사항과 함께 이전 메시지를 바꾸십시오. |
| 드롭 | 디 | 브랜치에서 커밋을 그대로 둡니다. | 디버깅 또는 실험적 커밋을 제거합니다. |
순서가 중요하며 `git log`의 반대입니다. 계획은 가장 오래된 커밋을 재생 순서로 맨 위에 나열하고 git log 및 대부분의 커밋 그래프는 최신 커밋을 먼저 표시합니다. 스쿼시 또는 수정은 항상 바로 위의 커밋, 즉 오래된 커밋에 통합됩니다. 스쿼시가 접을 부분 없이 맨 위에 있는 경우 GitTree는 유지하는 커밋 아래로 이동할 때까지 시작을 거부합니다.
해당 명령줄: git rebase -i
명령줄에서 변경하려는 커밋 바로 아래에 커밋 이름을 지정합니다. HEAD부터 다시 계산하거나 브랜치가 떠난 지점 main을 사용합니다.
# rewrite the last 5 commits
git rebase -i HEAD~5
# rewrite everything since the branch left main, without moving its base
git rebase -i $(git merge-base main HEAD)Git은 할 일 목록이 포함된 편집기를 엽니다. 이것은 아래에 있는 스크린샷과 동일한 계획입니다. 두 번째 커밋은 첫 번째 커밋에 압축되고 네 번째 커밋은 새 메시지를 받습니다.
pick f2cd67d chore(deps): upgrade Next.js and React
squash 19a1104 ci: cache pnpm store and run tests in parallel
pick f52edc8 refactor(api): extract repository layer from handlers
reword 05dfac2 feat(api): rate limit public endpoints
pick bf2385e fix(web): focus trap in the invite dialog파일을 저장하고 닫으면 Git이 재생을 시작합니다. 스쿼시 메시지와 다시 작성된 메시지를 요청하고, 계속하거나 포기하는 모든 edit 단계 또는 충돌에서 일시 중지됩니다.
git rebase --continue # after amending or resolving a conflict
git rebase --abort # stop and put the branch back where it wasGUI는 Git이 수행하는 작업이 아니라 계획 작성 방법을 변경합니다. GitTree는 컴퓨터에 이미 설치된 Git(버전 2.39 이상)과 동일한 계획을 실행하므로 앱과 터미널이 동일한 커밋을 생성합니다. 더 넓은 장단점을 알아보려면 Git GUI와 명령줄 비교를 읽어보세요.
GUI에서 대화형 리베이스를 수행하는 방법: GitTree 단계별
브랜치 확인 및 작업 카피 정리
정리하려는 지점을 확인하십시오. 커밋되지 않은 변경 사항을 먼저 커밋하거나 숨기거나, 이 리베이스를 위해 해당 변경 사항을 숨기고 나중에 다시 넣는 옵션을 선택하세요.
기본 커밋에서 편집기를 엽니다.
커밋 그래프에서 변경하려는 가장 오래된 커밋 바로 아래에 있는 커밋을 마우스 오른쪽 버튼으로 클릭하고 Interactive Rebase of the Commits…를 선택합니다. 동시에 다른 분기로 이동하려면 해당 분기를 마우스 오른쪽 버튼으로 클릭하고 Interactive Rebase Current Branch Onto This…를 선택하세요.
모든 커밋에 대한 작업 선택
각 행의 메뉴를 사용하거나 행에 초점을 맞추고 p, r, e, s, f 또는 d를 눌러 선택, 수정, 편집, 스쿼시, 수정 또는 삭제를 수행합니다.
드래그 또는 키보드로 재정렬
핸들로 행을 끌거나 커밋이 원하는 순서가 될 때까지 행에 초점을 맞추고 Alt+↑ 또는 Alt+↓를 누릅니다.
새 메시지 작성
단어 바꾸기 행은 메시지 상자를 제자리에 엽니다. 각각의 압축된 그룹은 결합된 메시지와 함께 목록 아래에 나타나 편집 준비가 되어 있으므로 시작하기 전에 결과 커밋을 볼 수 있습니다.
옵션을 확인하고 시작하세요
로컬 변경 사항을 숨길지 여부를 선택하고 이러한 커밋(update-refs)을 가리키는 분기를 이동하고 수정을 준비합니다! 커밋(자동 스쿼시). 일부 커밋이 이미 원격에 있는지 확인한 다음 Start Rebase를 클릭합니다.
계속, 중단 또는 실행 취소
편집이나 충돌로 인해 단계가 중지되면 배너는 리베이스 계속 및 리베이스 중단을 제공합니다. 리베이스가 완료되면 Undo는 전체 분기를 다시 되돌립니다.

Git GUI에서 커밋을 스쿼시하는 방법
커밋을 스쿼시하는 방법에 대한 짧은 대답은 커밋을 서로 옆에 놓고 첫 번째를 선택으로 두고 나머지는 스쿼시 또는 수정으로 표시하고 다시 재생하는 것입니다. GitTree에서는 그곳에 가는 세 가지 방법을 제공합니다.
리베이스 편집기에서 커밋 그룹 스쿼시
그룹 아래 커밋에서 편집기를 열고 첫 번째 커밋을 선택하고 다른 커밋은 스쿼시하거나 메시지를 원하지 않는 경우 수정하도록 설정하세요. 그룹이 연속되지 않은 경우 길 잃은 커밋을 제자리로 드래그합니다. GitTree는 커밋이 될 스쿼시를 포함하는 각 그룹을 편집할 수 있는 상자에 결합된 메시지와 함께 미리 봅니다.
그래프에서 커밋을 선택하고 Squash Commits를 선택합니다.
빠른 스쿼시를 수행하려면 그래프에서 현재 분기의 연속 커밋을 두 개 이상 선택하고 마우스 오른쪽 버튼을 클릭한 다음 Squash Commits를 선택합니다. GitTree는 리베이스를 실행하고 Undo는 별도의 커밋을 다시 되돌릴 수 있습니다. 동일한 메뉴는 커밋 메시지 편집..., 커밋 삭제..., 커밋 위로 이동 및 커밋 아래로 이동과 같이 단일 커밋을 한 단계로 다시 작성합니다. 이러한 단축키는 아직 원격에 없는 커밋에서 작동합니다. 푸시된 커밋의 경우 먼저 확인을 요청하는 편집기를 사용하세요.
끌어오기 요청을 병합할 때 스쿼시
팀이 풀 요청당 하나의 커밋을 유지한다면 브랜치를 전혀 다시 작성할 필요가 없습니다. GitTree의 풀 요청 보기는 스쿼시와 병합될 수 있으며 로컬 브랜치는 그대로 유지됩니다.

수정 커밋 및 자동 스쿼시: 수동으로 재정렬하지 않고 이전 커밋 수정
작업하는 동안 각각의 작은 수정 사항을 해당 커밋의 수정 사항으로 커밋합니다. Git의 제목은 fixup! <original title>입니다. 나중에 자동 스쿼시를 사용하는 대화형 리베이스는 모든 수정 사항을 대상 바로 아래로 이동하고 수정 사항으로 표시하므로 목록을 확인하고 시작하기만 하면 됩니다.
# record a correction for an earlier commit
git commit --fixup=05dfac2
# correct the commit and replace its message too
git commit --fixup=amend:05dfac2
# later: fold every fixup! and amend! commit into its target
git rebase -i --autosquash main
# turn autosquash on for every interactive rebase
git config --global rebase.autoSquash trueGitTree에서는 그래프 아래에 도킹된 내장 터미널에서 해당 명령을 실행하거나 커밋 메시지 상자에 fixup!, 공백 및 원래 제목을 입력합니다. Git은 수정 사항을 제목별로 일치시키므로 둘 다 동일한 커밋을 생성합니다. Arrange Fixup!으로 스쿼시! 그리고 수정하세요! commit 옵션을 켜면 이미 정렬된 편집기가 열리고 Git이 실행하는 내용이 바로 표시됩니다.
amend! 커밋은 계획에서 fixup -C가 됩니다(GitTree의 "Fixup, 메시지 사용"). 변경 사항은 접혀지고 해당 메시지는 대상의 메시지를 대체합니다. git-commit 문서에 따르면 원래 커밋을 작성한 사람은 변경되지 않습니다.
대화형 리베이스는 안전한가요? 실행 취소, 재로그 및 임대 강제 실행
리베이스는 이전 커밋을 바로 삭제하지 않습니다. Git의 가비지 수집이 훨씬 나중에 도달할 수 없는 객체를 지울 때까지 리프로그에서 도달 가능한 상태를 유지합니다. 실제 위험은 이전 지점에 대한 추적을 잃고 원격으로 동료의 작업을 덮어쓰는 것입니다.
완료된 리베이스 실행 취소
GitTree는 모든 리베이스 이전에 브랜치의 스냅샷을 찍기 때문에 툴바의 실행 취소는 그 이후로 브랜치를 이동한 것이 없는 한 업데이트 참조를 통해 리베이스가 이동한 다른 브랜치를 포함하여 이를 한 번의 클릭으로 다시 되돌립니다. git 재설정, 리베이스 또는 커밋을 실행 취소하는 방법에서 해당 안전망의 나머지 부분을 다룹니다. 명령줄에서:
# still in the middle of the rebase
git rebase --abort
# already finished: go back to the tip from before the rebase
git reflog show --date=relative
git reset --hard ORIG_HEADGit은 리베이스가 시작될 때 ORIG_HEAD를 이전 팁으로 설정하지만 리베이스 중 git reset 실행(예: 커밋 분할)은 이를 이동합니다. 리베이스 직후 현재 분기의 이전 위치인 @{1}는 여전히 이전 팁을 가리키므로 git reset --hard @{1}도 작동합니다. git reset --hard는 커밋되지 않은 변경 사항을 버리므로 먼저 커밋하거나 숨깁니다.
이미 푸시한 커밋을 다시 작성합니다.
GitTree는 이미 원격에 있는 커밋에 "On a Remote"라는 레이블을 지정하고 다시 작성하기 전에 확인하도록 요청합니다. 이후에는 정상적인 푸시가 거부되므로 강제 푸시가 필요합니다. 마지막으로 본 지점이 여전히 원격 지점을 가리키는 경우에만 원격 지점을 덮어쓰는 임대 양식을 사용하세요.
git push --force-with-lease
# safer when something fetches in the background
git push --force-with-lease --force-if-includes백그라운드 가져오기는 원격 추적 분기를 새로 고치고 임대를 약화시킬 수 있으므로 git-push 문서에서는 --force-if-includes 추가를 제안합니다. GitTree에서 강제 푸시는 항상 확인 시 표시되는 원격 팁에 고정된 --force-with-lease를 사용하고 해당 팁은 refs/ogt/trash 아래에 로컬로 유지되므로 원격에서 제거하는 커밋은 손실되지 않습니다. 실행 취소는 리모컨을 변경했기 때문에 강제 푸시를 되돌릴 수 없습니다.
단계가 중지되면: 편집 및 충돌
edit 단계 또는 더 이상 완전히 적용되지 않는 커밋으로 인해 리베이스가 일시 중지됩니다. GitTree에는 계획의 진행 상황과 계속 또는 중단 배너가 표시됩니다. 충돌은 3방향 편집기에서 열립니다. 자세한 내용은 [GUI에서 병합 충돌 해결](/ko/blog/resolve-git-merge-con conflicts)을 참조하세요. 리베이스하는 동안 Git은 병합의 측면을 바꿉니다. "ours"는 리베이스할 브랜치이고 "irs"는 여러분의 커밋이므로 GitTree는 "rebaseing on" 및 "your commit"으로 라벨을 붙입니다. 활성 작업 계속, 건너뛰기 또는 중단 단원에서는 각 선택을 연습하고, 브랜치를 다시 작성하는 대신 단일 커밋을 복사하려면 cherry-pick을 참조하세요.
풀 요청 전 커밋 기록 정리를 위한 팁
- 모든 커밋을 빌드하고 자체적으로 테스트를 통과하며 관련 없는 변경 사항을 별도로 유지합니다. 하나는 리팩터링용 커밋이고 다른 하나는 기능용 커밋입니다.
- 끌어오기 요청을 열기 전에 최신
main을(를) 기준으로 리베이스하면 검토자가 변경 사항만 볼 수 있습니다. - 쌓인 가지로 작업하시나요? update-refs를 켜서 빌드된 브랜치가 다시 작성된 커밋과 함께 이동하도록 하세요.
- 범위에 병합 커밋이 포함된 경우 GitTree는 이를 표시하지만 다시 쓰지 않습니다. 이 경우에는
git rebase -i --rebase-merges를 사용하세요. - 푸시하기 전에 커밋 그래프에서 결과를 확인하고, Claude Code 및 Codex를 사용한 AI 커밋 메시지와 같이 AI 코딩 CLI 초안 메시지를 직접 작성해 보세요.
- 먼저 무료 강의 게시되지 않은 작업을 새 기반으로 리베이스를 통해 일회용 저장소에 대해 연습해 보세요.
GitTree에는 English and Arabic의 macOS, Windows 및 Linux에 포함된 모든 Git 기능, 비공개 저장소를 포함하는 무료 계획이 있습니다. AI 비서인 Nour는 GitTree Pro와 함께 제공됩니다(가격 참조). 로그인하려면 Git 2.39 이상 및 GitTree 계정이 필요합니다. 다운로드 페이지에서 다운로드하거나 최고의 Git GUI 클라이언트를 먼저 비교하세요.
자주 묻는 질문
git rebase에서 스쿼시와 수정의 차이점은 무엇입니까?
둘 다 리베이스 계획에서 위의 커밋에 커밋을 통합하므로 두 가지 변경 사항 세트가 단일 커밋으로 끝납니다. Squash는 두 커밋 메시지를 결합하여 결과를 편집할 수 있게 해주는 반면, Fixup은 이전 커밋 메시지만 유지하고 나중 커밋 메시지를 삭제합니다. Fixup -C는 반대 작업을 수행하고 나중 메시지를 유지합니다.
마지막 3개의 커밋을 어떻게 스쿼시하나요?
명령줄에서 git rebase -i HEAD~3을 실행하고 첫 번째 줄을 선택으로 두고 나머지 두 줄을 squash 또는 fixup으로 변경한 후 저장하고 결합된 메시지를 편집합니다. GitTree에서 브랜치 상단의 네 번째 커밋을 마우스 오른쪽 버튼으로 클릭하고 위 커밋의 Interactive Rebase를 선택한 다음 두 개의 최신 커밋을 스쿼시로 설정하고 Start Rebase를 클릭합니다. 세 가지 커밋이 아직 리모컨에 없으면 해당 커밋을 선택하고 Squash Commits를 선택할 수도 있습니다.
대화형 리베이스를 어떻게 실행 취소하나요?
리베이스가 아직 실행 중이면 git rebase --abort 또는 GitTree 배너의 Abort Rebase 버튼을 사용하여 중지하세요. 이미 완료된 경우 리베이스 이전에 찍은 스냅샷을 복원하는 GitTree에서 Undo를 사용하거나 명령줄에서 git Reset --hard ORIG_HEAD를 실행하세요. 이전 지점이 필요한 경우 리프로그에는 지점의 모든 이전 위치가 나열됩니다.
이미 푸시한 커밋을 리베이스해도 안전합니까?
보지 못한 커밋 덮어쓰기를 거부하는 git push --force-with-lease를 사용하여 푸시하는 한 자신만 사용하는 브랜치에서는 안전합니다. 공유 브랜치에서 기록을 다시 작성하면 다른 모든 사람이 복사본을 복구해야 하므로 먼저 팀에 동의하거나 브랜치를 다시 작성하는 대신 끌어오기 요청이 병합될 때 스쿼시하세요.
GitTree는 수정을 지원합니까? 커밋과 자동 스쿼시?
예. 제목이 fixup!, squash!로 시작하는 커밋 아니면 수정하세요! 대화형 리베이스 편집기가 열릴 때 단일 리베이스에 대해 또는 기본적으로 rebase.autoSquash 설정을 따를 수 있는 기본 설정을 통해 자동으로 정렬될 수 있습니다. 실행되기 전에 정렬된 목록이 계속 표시되며 Git은 해당 목록을 정확하게 실행합니다.
macOS, Windows 및 Linux에서 명령줄 없이 대화형 리베이스를 수행할 수 있나요?
예. GitTree의 대화형 리베이스 편집기는 macOS, Windows 및 Linux에서 드래그 앤 드롭 또는 키보드 순서 변경 및 실행 취소를 통해 선택, 단어 변경, 편집, 스쿼시, 수정 및 드롭과 같은 방식으로 작동합니다. 이 앱에는 모든 Git 기능(AI 도우미 Nour, GitTree Pro와 함께 제공)을 포함하고 GitTree 계정으로 작동하며 컴퓨터에 이미 설치된 Git 버전 2.39 이상을 사용하는 무료 계획이 있습니다.
대화형 리베이스 또는 스쿼시 병합을 사용하여 스쿼시해야 합니까?
여러 개의 의미 있는 커밋이 유지되고 정리되어 합리적인 순서로 유지되어야 하거나 검토자가 커밋별로 풀 요청 커밋을 읽을 때 대화형 리베이스를 사용하세요. 전체 풀 요청이 메인 브랜치에 하나의 커밋으로 착륙해야 하는 경우 스쿼시 병합을 사용하세요. 자체 브랜치를 그대로 유지하고 강제 푸시가 필요하지 않습니다.
출처
다른 제품에 대한 주장은 2026년 10월 22일의 공식 페이지에서 확인되었습니다. 가격과 기능은 변경됩니다. 공급업체 페이지가 진실의 원천입니다.