Git에서 스쿼싱 커밋!
기본적으로 우리는 커밋을 스쿼시하여 git 로그를 더 간결하게 만듭니다.
전제 조건:
⚠️ 면책조항 ⚠️
이것들을 실험하기 전에 항상 파일을 백업하십시오!
모든 설정이 완료되면 주제에 대해 알아봅시다! 이해하기 쉽도록 이것을 조각조각 나누어서 멍청한 방식으로 설명하려고 노력했습니다.
시작하기 🥳
이것은 내 예제 리포지토리의 커밋 기록입니다.
따라서 위의 예에서 마지막과 첫 번째 사이에 있는 5개의 커밋 기록은 의미가 없기 때문에 원하지 않습니다. 커밋 히스토리를 단일 커밋으로 만들자!
터미널을 쏘고 repo 폴더 디렉토리로 이동하십시오.
$ cd <repo-folder>
repo 폴더가 모든 커밋으로 업데이트되었는지 확인하고 다음 명령을 작성하십시오...
$ git rebase -i HEAD~<n>
In this case we are gonna give n as 6, where n is the number of commits history we need and these commits are from top-bottom. if we give n including the first commit we made, probably it shoots an error.
실험중 🧪
이전 단계를 실행하면 다음을 수행하기 위한 커밋 기록 및 옵션이 포함된 아래 인터페이스가 나타납니다.
pick d8c1963 Adding contents
pick 5e4ea01 added
pick a3e1b06 removed few content
pick f9d4b67 Added few contents
pick 9e69811 Fixed typos and added content
pick 42dbace final
# Rebase 5f5302b..42dbace onto f9d4b67 (6 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 <commit> = like "squash", but discard this commit's log message
# 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.
스쿼시 시작❗️
이제 S를 누르면 편집 모드로 들어갑니다. 스쿼시해야 하는 커밋에 대해 pick을 스쿼시로 교체합니다.
pick d8c1963 Adding contents
squash 5e4ea01 added
squash a3e1b06 removed few content
squash f9d4b67 Added few contents
squash 9e69811 Fixed typos and added content
pick 42dbace final
# Rebase 5f5302b..42dbace onto f9d4b67 (6 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 <commit> = like "squash", but discard this commit's log message
# 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.
#
-- INSERT --
basically, all these 4 commits history is gonna be squashed into the previous one with a commit message which we are going to give in the next step. Always don't include squash in the first commit(Well! in this case, "d8c1963"), probably it shoots an error.
이제 Esc + : + w + q를 눌러 변경 사항을 저장하고 저장 후 shift + z를 두 번 누르면 다음과 같은 인터페이스가 나타납니다...
# This is a combination of 5 commits.
# This is the 1st commit message:
Adding contents
# This is the commit message #2:
added
# This is the commit message #3:
removed few content
# This is the commit message #4:
Added few contents
# This is the commit message #5:
Fixed typos and added content
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date: Fri Dec 4 12:14:48 2020 +0530
#
# interactive rebase in progress; onto 5f5302b
"~/Dev-test-repo/.git/COMMIT_EDITMSG" 33L, 839C
here what it does is
처리 🔄
이제 커밋 메시지를 삭제하고 새 커밋 메시지를 만들 기회입니다.
final test
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date: Fri Dec 4 12:14:48 2020 +0530
#
# interactive rebase in progress; onto 5f5302b
# Last commands done (5 commands done):
# squash f9d4b67 Added few contents
# squash 9e69811 Fixed typos and added content
# Next command to do (1 remaining command):
# pick 42dbace final
# You are currently rebasing branch 'main' on '5f5302b'.
#
# Changes to be committed:
# modified: README.md
다시 Esc + : + w + q를 누르고 저장한 후 shift + z를 두 번 누릅니다. 이제 당신은 그 환경에서 쫓겨날 것입니다.
이륙 ✈️
이 모든 노력이 우리 레포에 반영되어야겠죠!? 그럼 Github의 예제 리포지토리로 모든 것을 푸시하겠습니다...
$ git push -f
here, we use -f since we're force pushing it.
드디어 🎉
여러 커밋을 하나의 커밋으로 압축했습니다!
초보자의 경우 커밋 삭제는 커밋 스쿼시와 다릅니다.
이 기사가 도움이 되셨기를 바랍니다! 유용하다고 생각되면 좋아요를 누르고 공유하세요. 아래 의견에 귀중한 제안을 게시하십시오!
Reference
이 문제에 관하여(Git에서 스쿼싱 커밋!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/yeganathan18/squash-commits-in-github-235i텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)