Git Gremlin: Squash 제출(Git 히스토리 향상)

6960 단어 githubgit
Git는 개발자가 작은 코드에서 큰 코드의 변경을 효율적으로 처리할 수 있도록 무료로 시작된 분포식 버전 제어 시스템이다.하지만 쉽게 망칠 수 있는 좋은 기회가 생겼다.Git는 작은 실수를 하기 쉬워서 전체 업무에 재난적인 영향을 미칠 수 있다.일부 Git 오류는 다른 오류보다 더 무섭고 고치기 어렵지만 두려워하지 마세요!당황할 필요 없어. 너는 약간의 도움으로 Git의 재난을 물리칠 수 있어.Git Gremlin은 계획대로 일이 진행되지 않았을 때 어떻게 해야 하는지를 알려주는 유용한 힌트를 많이 제공한다.
  • User Story
  • Scenario

  • Issue
  • Resolution
  • Prerequisites
  • Procedure

  • 사용자 이야기
    개원 공헌자로서, 나는 역사 기록을 더욱 깔끔하게 제출하기 위해 라가 요청한 내용을 그룹으로 나누고 싶다

    각본
    Git를 사용할 때 로컬 제출 기록을 수정하고 어떤 파일이 어떤 제출에 들어갈지 결정해야 할 수도 있습니다.
    다른 방식으로 발생한 것처럼 보일 수 있도록 제출을 다시 쓸 수 있습니다.이것은 제출 순서를 변경하거나 메시지를 변경하거나 제출 중인 파일을 수정하거나 제출을 완전히 삭제하는 것과 관련이 있을 수 있습니다 , 저장소에 액세스할 수 있는 다른 기여자와 작업을 공유하기 전에
    예를 들어 git log을 사용하여 제출 기록을 확인한 후에 기능 지점에 다음과 같은 난감한 제출이 있음을 알 수 있습니다.
    * ed88dab Correct configuration details
    * dca37d5 typo
    * 46e83b5 test
    * e30e77d undo mistake
    * 9409777 Add configuration details
    
    git log의 출력이 다음과 같이 표시되도록 기록을 수정하고자 합니다.
    * ed88dab Add Test and correct configuration details
    * 9409777 Add configuration details
    

    질문이 뭐예요?
    제출 기록을 어떻게 확장해서 한 번 제출에 일련의 N회 제출을 표시합니까?

    어떻게 이 문제를 해결합니까?
    압출은 대량의 제출을 소량의 의미 있는 제출로 압축하여git의 역사를 더욱 명확하게 하는 데 사용할 수 있다.
    Git의 압출은 일련의 제출을 통합하는 데 도움을 주는 재정립 기반을 사용하는 기술이다.git rebase을 사용하여 일련의 제출을 새로운 기본 제출으로 조합할 수 있습니다.역사 기록을 다시 쓰는 데 리셋을 사용할 때 현재 작업 지점의 제출을 전달하는 지점 헤더에 자동으로 적용합니다.
    리베이스를 상호작용적으로 (-i 옵션을 git rebase에 추가) 함으로써 단일 제출을 변경할 수 있습니다.git rebase --interactive(약칭 -i)에서 변경 가능한 제출 목록과 허용 가능한 명령 목록을 포함하는 편집기를 엽니다. 사용자가 초기화 작업을 시작하기 전에 목록을 편집할 수 있습니다.압축 커밋 외에도 다음 옵션을 사용할 수 있습니다.
    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
    d, drop = remove commit
    

    선결 조건
  • 은 기록을 제출하는 지점을 가지고 있다.
  • 터미널을 사용하여 명령을 실행해야 합니다.

  • 절차.
    다음 명령을 사용하여 제출 기록을 가져옵니다.
    git log
    
    출력은 다음과 같은 분기의 커밋을 반영합니다.
    * 617c65c Fix CRD group and minor updates
    * 46e95a5 WIP additional work in progress
    * e30e77d WIP work in progress
    * 9409666 Adding the build script
    
    WIP(Work in Progress)가 사용 내역에 제출되므로 Git 사용 내역을 보다 간결하게 압축할 수 있습니다.커밋의 기본을 대화식으로 재설정하려면 다음 명령을 사용합니다.
    git rebase -i HEAD~<n>
    

    Alternatively, you can use the command
    git rebase -i <after-this-commit-sha1>.


    명령의 -i 로고는 상호작용 재시작을 표시하고, <n>은 역사에서 다시 쓰기를 원하는 제출 횟수를 표시합니다.
    예제에서는 처음 커밋하기 전에 모든 커밋 베이스를 재설정하고 다음 명령을 사용할 수 있습니다.
    git rebase -i HEAD~3
    
    주소 재지정 프로세스가 시작되면 인터랙티브 편집기가 열립니다.rebase 명령은 다음 옵션을 포함하는 인터페이스를 표시합니다.
    pick 617c65c Fix CRD group and minor updates
    pick 46e95a5 WIP additional work in progress
    pick e30e77d WIP work in progress
    
    # Rebase 617c65c..e30e77d onto e30e77d (3 command(s))
    # 
    # 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.
    #
    # Note that empty commits are commented out
    

    The editor displays the commits in reverse order starting from 3 commits back, which is defined by HEAD~3.


    편집기에서 pick(맨 윗줄을 제외한 모든 제출 줄에서)을 squash으로 바꿉니다.
    pick 617c65c Fix CRD group and minor updates
    squash 46e95a5 WIP additional work in progress
    squash e30e77d WIP work in progress
    
    squash 명령은 세 개의 제출을 상부 제출로 통합한다.

    Alternatively, you can use the fixup command and amend the commit message.


    변경 사항을 저장하고 인터랙티브 편집기를 종료하려면 Esc 키를 누르고 :을 입력한 다음 x을 입력하고 enter 키를 누르십시오.git log의 출력을 다시 보면 제출이 한 번 표시됩니다.
    이렇게!깊이 연구하려면 Git Gremlin의 게시물을 더 많이 보십시오.또한 다음과 같은 리소스를 통해 Git를 더욱 효율적으로 사용할 수 있습니다.
  • Git-SCM-Git 참조 파일
  • Git Training - Git 공식 메모지
  • Visual Git - 가시화 탐색 Git 도구
  • Git Game - 재미있는 도전을 통해 Git를 배울 수 있는 데스크톱 앱입니다.
  • 이 글을 확인해 주셔서 감사합니다. 계속하세요.

    좋은 웹페이지 즐겨찾기