Git protip: 오래된 커밋 메시지를 빠르게 다시 작성

3356 단어 gitprotipcommit
내가 가끔 그렇듯이, 나도 가끔 커밋 메시지를 엉망으로 만들다가 잠시 후에(커밋을 몇 번 더 한 후) 알게 됩니다. 가장 흔한 실수는 아마도 커밋이 참조하는 link the issue을 잊어버리는 것일 것입니다.

나중에, 그러나 너무 늦지 않았습니다!

다음과 같은 생각을 하고 있다고 말하지 마십시오. *"신경쓰지 마세요. UI를 열고 손으로 입력하겠습니다!"또는 당신이 포기하고 있다는 것! 대화형 리베이스에 대해 모르거나 사용하기가 두렵기 때문일 수 있습니다 😨. 솔직히, 그렇게 해서는 안 됩니다. 이 명령으로 매우 귀중한 동맹임을 증명합니다!

리베이스와는 별도로 메시지를 변경하려는 의도를 표현하는 커밋을 만들 수 있다는 것을 알고 있습니까? 나는 당신이하지 않을 내기! 다행히도 제가 😁 도와드리겠습니다. git commit --fixup reword:<commit-ref-to-fix> 명령을 소개하겠습니다. 이것은 약간의 한 입이지만 누가 신경 쓰나요? 우리는 마법 주문 🔮처럼 보이는 멋진 별칭으로 그것을 포장할 것입니다. autoreword 소개:

git config --global alias.autoreword '!git commit --fixup reword:$1 && git rebase --autosquash --interactive --rebase-merges $1~1 && echo "autoreword finished"'


이 명령을 실행하면 어떻게 될까요?

🌀 사악한 웜홀이 열리고, 이 세상을 잿더미로 만드는 지옥불🔥을 방출합니다! (사실 아니, 우리는 그것을 위해 마법을 사용할 필요조차 없습니다 😭)

그러나 심각하게 Git은 amend! …로 시작하는 메시지와 함께 편집기를 열고 수정하려는 커밋 메시지의 첫 번째 줄, 줄 바꿈, 다시 (전체) 커밋 메시지가 이어집니다.

amend! chore(dx): setup ESLint and Prettier

chore(dx): setup ESLint and Prettier

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch chore/automation


그런 다음 메시지를 변경할 수 있습니다(단, 첫 번째 줄은 그대로 유지).

amend! chore(dx): setup ESLint and Prettier

chore(dx): setup ESLint and Prettier

# Here is the reference to my issue!
Closes #42

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch chore/automation


이제 파일을 저장하고 닫을 수 있습니다.

그런 다음 Git은 수정 커밋을 생성하고 별칭은 잘못된 커밋의 직접 조상에서 시작하여 대화식 리베이스를 자동으로 실행합니다. fixup -C 접두어가 붙은 목록에서 수정 커밋이 이미 올바른 위치에 있음을 확인할 수 있도록 실행한 작업 목록과 함께 편집기를 마지막으로 엽니다.

pick 3f0714b chore(dx): setup ESLint and Prettier
fixup -C 61eecda amend! chore(dx): setup ESLint and Prettier
pick 9a7cf39 chore(dx): setup Husky, lint-staged, precommit-checks, commitlint


더 이상 할 일이 없지만 파일을 확인, 저장 및 닫습니다. 그런 다음 리베이스가 충돌 없이 실행되고 로그를 확인하여 커밋 메시지가 업데이트되었는지 확인할 수 있습니다!

작업 목록에서 label ontoreset onto 와 같은 일부 키를 볼 수 있습니다. 이는 리베이스가 리베이스하는 동안 로컬 병합을 유지하는 --rebase-merges 옵션과 함께 호출되기 때문입니다. 당신은 그것에 대해 걱정할 필요가 없습니다 😌.

좋은 웹페이지 즐겨찾기