Git에서 스쿼싱 커밋!

여러분, 안녕하세요! 다른 주제로 돌아가서, Github에 있는 당신의 리포지토리가 이해가 되지 않는 많은 커밋 기록을 가지고 있다고 느낀 적이 있습니까? 예를 들어 내 경우 readme의 오타를 수정합니다. 당신이 초보자라면 새로운 저장소를 생성하고 단일 커밋 메시지 "First commit"에서 쓸모없는 모든 커밋을 푸시하는 것을 생각할 수 있습니다. 글쎄, 당신은 바로 이곳에 있습니다. 실제로 여러 커밋을 하나로 스쿼시할 수 있는 방법이 있습니다.

기본적으로 우리는 커밋을 스쿼시하여 git 로그를 더 간결하게 만듭니다.

전제 조건:


  • 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.



    드디어 🎉



    여러 커밋을 하나의 커밋으로 압축했습니다!



    초보자의 경우 커밋 삭제는 커밋 스쿼시와 다릅니다.

    이 기사가 도움이 되셨기를 바랍니다! 유용하다고 생각되면 좋아요를 누르고 공유하세요. 아래 의견에 귀중한 제안을 게시하십시오!

    좋은 웹페이지 즐겨찾기