타임머신의 팰퍼틴


  • Refactoring
  • The plan

  • Rebasing
  • Combining multiple commits (squash)
  • Update commit messages
  • Takeaways

  • 리팩토링



    아시다시피, 저는 이 시리즈의 이전 게시물에서 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" 로 설정). 이 편집기는 리베이스하려는 모든 커밋을 표시하고 각 커밋으로 수행할 작업을 지정할 수 있도록 합니다. picksquash 또는 fixup로 변경하여 커밋을 결합할 수 있습니다.

    여러 커밋 결합(스쿼시)



    리베이스 후 리팩토링과 관련된 커밋을 합쳤다. 즉, 브랜치refactoring의 모든 커밋은 squashed를 하나의 커밋으로 가져옵니다. 편집기에서 picksquash로 변경하면 됩니다.

    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는 기록을 깨끗하고 읽기 쉽게 유지하는 데 필수적입니다.

    좋은 웹페이지 즐겨찾기