Git Gremlin: Squash 제출(Git 히스토리 향상)
Issue
사용자 이야기
개원 공헌자로서, 나는 역사 기록을 더욱 깔끔하게 제출하기 위해 라가 요청한 내용을 그룹으로 나누고 싶다
각본
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를 더욱 효율적으로 사용할 수 있습니다.
Reference
이 문제에 관하여(Git Gremlin: Squash 제출(Git 히스토리 향상)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/joaedwar/git-gremlin-squash-commits-to-make-your-git-history-cleaner-gjn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)