읽을 수 있는 Git 커밋 기록이 있습니까?

5328 단어 git

지저분한 커밋 기록을 정리합시다



git commit --amend로 최신 커밋 메시지 재사용



코드 품질 보증(일명 린터)에 익숙하지 않았던 때를 회상해 보면, 이러한 린터 검사에 매우 자주 실패했습니다. 결과적으로 다음과 같은 커밋 메시지가 있었습니다.

$ git commit -m "Improve code style"


이 명령은 지루하고 메시지는 의미 있는 정보를 제공하지 않습니다. 그런 다음 git commit --amend --no-edit가 작동합니다. 현재 커밋에 대한 마지막 커밋 메시지를 재사용할 수 있습니다.apps/users/views.py에서 후행 공백을 제거한다고 가정합니다.

$ git add apps/users/views.py apps/users/serializers.py
$ git commit -m "Provide UserViewSet"
$ git add apps/users/views.py
$ git commit --amend --no-edit


git rebase로 긴 커밋 기록 정리



내 기능 분기 워크플로 중에 코드 검토 또는
나는 다음 날까지 그 일을 떠나야 한다.

작업이 끝나면 내 커밋 기록은 다음과 같이 끝날 수 있습니다.

(cs50w-network) hunghoang@MacBook-Pro project4 % git log --oneline
58701f5 (HEAD -> feature/migrate-to-htmx-alpinejs, origin/feature/migrate-to-htmx-alpinejs) Remove unused vanilla js
bf2f1b7 Fix navbar offsetHeight
c798ff0 minor change
05c3b93 Provide separate api directory
202f666 Disable follow-btn on host user timeline
93b22fd Support followers_count update
93e8647 Improve the feature of prevent editing 2 post simultaneously
e4e5aa5 Reuse PostViewSet
88b55b9 Refine post/list.html
09b9acf Re-arrange auth templates
0250ecb Re-arrange template to project-level
30ae17b Integrate htmx into post/list.html


이러한 변경 로그는 기능이 개발 단계에 있는 동안 중요하지만 main 분기의 전체 기록을 살펴볼 때 흩어져 있고 불필요해 보입니다. 스쿼싱 커밋은 다른 사람들이 이해할 수 있도록 커밋 기록을 깔끔하게 만들 뿐만 아니라 나중에 내가git merge 충돌을 해결할 때 한 번에 쉽게 충돌을 해결할 수 있습니다.

먼저 기능 분기에 있는지 확인합니다.

$ git switch feature-branch


둘째, rebase를 사용하여 원래 기본 커밋 위에 분기를 스쿼시합니다.

$ git rebase --keep-base -i main


이 플래그는 무엇입니까?
--keep-base 플래그는 main에서 분기된 기능 분기의 기본 커밋에 대한 git rebase를 알려줍니다.-i는 rebaseinteractive mode를 가능하게 하는 대화형을 나타냅니다. 이렇게 하면 리베이스 작업을 선택하는 데 사용할 수 있는 파일이 있는 텍스트 편집기가 열립니다.

셋째, rebase 파일을 변경하여 모든 커밋을 첫 번째 커밋으로 스쿼시합니다.
리베이스할 때 커밋이 사용할 때와 비교할 때 반대 순서로 나열됩니다git log.

pick 30ae17b Integrate htmx into post/list.html
pick 93e8647 Improve the feature of prevent editing 2 post simultaneously
pick 93b22fd Support followers_count update
pick 202f666 Disable follow-btn on host user timeline
pick 05c3b93 Provide separate api directory
pick c798ff0 minor change
pick bf2f1b7 Fix navbar offsetHeight
pick f98b90a Remove unused vanilla js

# Rebase 3349b96..f98b90a onto 8b92fd6 (12 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 amendingx
# 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
...


(간결성을 위해 추가 설명은 제거했습니다.)

커밋 아래의 주석 블록은 가능한 작업에 대한 미니 치트시트입니다.
squash에게 모든 커밋을 첫 번째 커밋으로 지정하려면 f로 첫 번째 커밋을 제외한 모든 커밋 라인을 변경해 보겠습니다.

pick 30ae17b Integrate htmx into post/list.html
f 93e8647 Improve the feature of prevent editing 2 post simultaneously
f 93b22fd Support followers_count update
f 202f666 Disable follow-btn on host user timeline
f 05c3b93 Provide separate api directory
f c798ff0 minor change
f bf2f1b7 Fix navbar offsetHeight
f f98b90a Remove unused vanilla js

# Rebase 3349b96..f98b90a onto 8b92fd6 (12 commands)
#
# Commands:


넷째, 파일을 저장하고 닫으면 Git이 squashing을 수행합니다. 완료되면 git log --oneline 결과를 확인하십시오.

다섯째, 기본 분기의 최신 버전을 가져온 다음 병합할 수 있습니다feature-branch.

결론


git commit --amend --no-editgit rebase --keep-base -i main는 내가 기능 분기 워크플로 중에 가장 많이 사용하는 두 가지 Git 명령입니다. 그들이 당신을 도울 수 있기를 바랍니다.

좋은 웹페이지 즐겨찾기