본문 바로가기
개발/Git

git rebase -i : drop으로 필요없는 커밋 날리기

by 안뇽! 2022. 2. 10.
반응형

 

DROP

참고로 drop은 커밋메시지 정리가아니라, 커밋을 아예 날려버리는 용도이다.

커밋메시지 정리를 원하면 squash나 fixup을 해야한다.

추후에 업로드하겠ㅇ므


 

일단 아래와 같이 커밋을 마구잡이로 남겼다.

 

브랜치이름을 11로 하고 원격 repo에 push 하였다.

git push origin 11

master 브랜치에 pr을 날려보니 쓸데없는 커밋들이 많다.(막커밋1,2,3,4)

rebase로 커밋메시지를 정리해보자.

 

막커밋1,2,3,4는 지우고 ‘이 커밋만 남겨보자' 커밋만 살리고싶음

 

터미널에 다음 명령어 입력, 5는 5개의 메시지라는 뜻. 숫자는 커밋메시지 수만큼 적으면 됨

git rebase -i HEAD~5

입력하면 다음과 같은 메시지들이 보인다.

pick 29273a6 막커밋1
pick 906f9f7 막커밋2
pick 7821fce 막커밋3
pick 84f5ba7 막커밋4
pick 1884ce7 이 커밋만 남겨보자

# Rebase 67e6637..1884ce7 onto 67e6637 (5 commands)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup [-C | -c] <commit> = like "squash" but keep only the previous
#                    commit's log message, unless -C is used, in which case
#                    keep only this commit's message; -c is same as -C but
#                    opens the editor
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# .       create a merge commit using the original merge commit's
# .       message (or the oneline, if no original merge commit was
# .       specified); use -c <commit> to reword the commit message
#
# 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.

맨위 4줄에 pick을 drop으로 바꿔준다.(지우고 싶을 경우)

drop 29273a6 막커밋1
drop 906f9f7 막커밋2
drop 7821fce 막커밋3
drop 84f5ba7 막커밋4
pick 1884ce7 이 커밋만 남겨보자

# Rebase 67e6637..1884ce7 onto 67e6637 (5 commands)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup [-C | -c] <commit> = like "squash" but keep only the previous
#                    commit's log message, unless -C is used, in which case
#                    keep only this commit's message; -c is same as -C but
#                    opens the editor
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# .       create a merge commit using the original merge commit's
# .       message (or the oneline, if no original merge commit was
# .       specified); use -c <commit> to reword the commit message
#
# 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.

지울 커밋들을 drop으로 바꿔주고 :wq 를 입력하면 다음과 같이

Successfully rebased and updated refs/heads/11.

메시지가 뜬다.

backup용 브랜치를 만들고 거기다가 우선 잠깐 보관해둠.

브랜치11을 지운 후 다시 생성

git log 명령어를 통해 커밋 메시지 기록을 확인해보면 막커밋 1,2,3,4들이 사라졌다.

이후 원격 repo에서 쓸데없는 커밋메시지들이 함께 push 되어 있는 브랜치 11을 삭제해주고

다시 11번 브랜치를 push 함.

 

다시 pr을 날려보니 막커밋 1,2,3,4 들이 사라지고 원하는 커밋메시지만 남아있음.

(커밋메시지들뿐만 아니라 커밋도 사라진다. 커밋메시지만 정리하고 싶으면 fixup 이나 squash 사용)

 

굿


더 좋은방법이 있으면 말씀부탁드립니다!

 

반응형