squash [skwɑːʃ;skwɔːʃ]
동사1. 짓누르다, 으깨다, 찌부러뜨리다
git에 commit들을 하나의 commit으로 묶을 수 있습니다
squash라고 하는데 뜻그대로 해당 commit들을 강제로 짜부시킨 느낌입니다
우선 squash라고하는 명령어는 없습니다
-i, --interactive let the user edit the list of commits to rebase
rebase의 interactive 옵션을 이용해 squash를 수행할 수 있습니다
종종 PR을 하다보면 commit을 합쳐달라는 요청을 받는데
이미 push해버린 상태에서 3개의 commit을 squash 하는 예로 보겠습니다
(중요한 repository라면 사전에 백업을 먼저 수행하고 진행하세요)
3개의 commit을 squash하는 경우 아래와 같이 수행합니다(branch는 일반적으로 main 이겠죠)
git rebase -i origin/[branch 명]~3 [branch 명]
혹은 해당 commit에서 최신까지의 모든 commit을 squash하고 싶은 경우
git rebase -i [목표보다 하나 이전의 commit]
vi가 열리며 아래와 같은 git 메시지가 발생합니다
pick 7c65355 Task 1/3
pick 2639543 Task 2/3
pick d442427 Task 3/3
# Rebase 2260a88..d442427 onto 2260a88
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
가장 위는 pick으로 냅두고 나머지 pick은 squash로 변경하여 저장합니다(:wq)
이후 아래와 같이 새로운 vi가 열리며 3개의 commit이 합쳐져 하나의 commit 메시지로 합치도록 됩니다
pick 7c65355 Task 1/3
Rebasing (3/3)
# This is a combination of 3 commits.
# The first commit's message is:
Task 1/3
# This is the 2nd commit message:
Task 2/3
# This is the 3rd commit message:
Task 3/3
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# rebase in progress; onto 2260a88
# You are currently editing a commit while rebasing branch 'master' on '2260a88'.
#
# Changes to be committed:
# modified: README.md
#
~
원하는 commit 메시지로 변경하여 저장합니다(:wq)
아래 명령어를 수행하여 squash된 commit을 push합니다
git push origin +[branch 명]
(이 명령은 기존의 상황에 관계없이 강제로 branch의 commit을 로컬의 상황으로 덮어씌우기 때문에 확실치 않다면 백업 후 진행하기 바랍니다.)
git log를 수행하여 commit이 변경된 것을 확인할 수 있습니다
'Cooperation' 카테고리의 다른 글
[Git] GitHub Organization - remote: Permission to repository (0) | 2021.10.07 |
---|---|
[Git] rebase is cleaner (merge vs rebase) (0) | 2021.08.30 |
[Git] remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. (0) | 2021.08.16 |
Clean Code - 주석 (0) | 2021.08.06 |
Clean Code - 함수 (0) | 2021.08.01 |