타임머신의 팰퍼틴
Refactoring
리팩토링
아시다시피, 저는 이 시리즈의 이전 게시물에서
palpatine
가 약간 엉망이라는 것을 인정했습니다.While this project is something I enjoy wholeheartedly, it is also a project I get grades from. Due to deadlines, quick decisions had to be made, therefore, there is room for improvement.
궁극적으로 나는 코드베이스를 리팩토링하고 중복을 제거하고
refactoring
라는 다른 브랜치에서 더 읽기 쉽게 만들기로 결정했습니다. 한편, 나는 unit tests
를 잊지 않았다. 현재palpatine
에는 아무것도 없지만 몇 주 후에 필요에 따라 추가할 예정입니다. 코드를 리팩토링하고 모양에 만족하는지 확인하는 것은 테스트 작성 과정에서 큰 역할을 합니다. 잘 구조화되고 이해하기 쉬운 코드에 대한 테스트를 작성하는 것이 훨씬 쉽습니다.계획
기본 클래스
Handler
와 기본 클래스를 상속하는 클래스MarkdownHandler
, TextHandler
가 포함된 새 파일FileHandler.h로 끝났습니다. 파생 클래스에서 재정의되는 가상 함수가 있으므로 각각 다형성의 개념을 사용할 수 있습니다. 이로 인해 코드 라인이 대폭 줄어들어 더욱 강력해졌습니다.리베이스
리팩토링에 만족한 후, 나rebased 브랜치
refactoring
. rebasing이 무엇인지 알기 전에 git을 심도 있게 다루었다면.내 경우에는? 나는 이 2k22Hacktoberfest 전까지는 간단한 git 명령(
push
, pull
, commit
, merge
) 과만 잘 지내고 있었습니다.As we are in the middle of
Hacktoberfest
and if you are raising PRs in big projects, you probably know what I am talking about. (strict guidelines on linting, commit messages, rebasing, squashing, etc.)
리베이스는 git에서 가장 강력하고 유용한 명령 중 하나이지만 올바르게 사용하는 것은 까다로울 수 있습니다.
리팩토링과 관련 없는 커밋이 많아서 어쩔 수 없이 했습니다. 역사를 깨끗하고 읽기 쉽게 유지하고 싶었습니다. 다음 명령을 사용하여 분기를 리베이스했습니다.
git rebase main -i
git rebase -i HEAD~<number of commits>
를 사용하여 마지막 <number of commits>
을 리베이스할 수도 있습니다.내가 지정하고 있기 때문에
-i , --interactive
이렇게 하면 git 구성에서 지정한 편집기가 열립니다. (즉, 편집기를 VSCode -> git config core.editor "code --wait"
로 설정). 이 편집기는 리베이스하려는 모든 커밋을 표시하고 각 커밋으로 수행할 작업을 지정할 수 있도록 합니다. pick
를 squash
또는 fixup
로 변경하여 커밋을 결합할 수 있습니다.여러 커밋 결합(스쿼시)
리베이스 후 리팩토링과 관련된 커밋을 합쳤다. 즉, 브랜치
refactoring
의 모든 커밋은 squashed
를 하나의 커밋으로 가져옵니다. 편집기에서 pick
를 squash
로 변경하면 됩니다.I use
git log --graph --all --oneline
a lot. It shows the history of the commits in a graph. It is very useful to see the history of the commits and the branches.
커밋 메시지 업데이트
커밋을 스쿼시한 후에도 여전히 커밋 메시지를 편집하고 싶을 수 있습니다. 아마도 정확하지 않을 수 있습니다. 이전 커밋 메시지를 변경하는 수정된 커밋을 수행할 수 있습니다.
git commit --amend
테이크아웃
병합에 대한 대화식 리베이스의 진정한 힘은 결과
main
분기에서 커밋 기록을 확인하면 커밋이 하나만 있는 것처럼 보일 것입니다. (즉, palpatine8ceba56에 대한 내 찌그러진 커밋을 확인하십시오.) 이것은 다른 모든 사람에게 당신이 완벽한 양의 커밋으로 모든 코드를 구현한 "화려한"개발자인 것처럼 보이는 방식으로 놀랍습니다. 그러나 실제로는 하나로 압축한 여러 커밋이 있습니다. 실제로interactive rebasing
는 기록을 깨끗하고 읽기 쉽게 유지하는 데 필수적입니다.
Reference
이 문제에 관하여(타임머신의 팰퍼틴), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/batunpc/palpatine-on-timemachine-5a99텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)