병합하기 전에 분기를 만드세요.

Cover Image: Puppy Bath Time! by pixel artist Andrea Zevallos - 




드디어! 내 지형지물을 검토할 준비가 되었습니다. 이제 PR을 열겠습니다…
다음 질문을 숙고하십시오. 귀하의 지점은 어떻게 생겼습니까?

$> git log --pretty=format:'%h - %s' main..feature/drag-n-drop-grid  
f6dec33 - chore: revert tsconfig 
ee409e7 - revert DragDropWrapper (recover prev. code) 
7dfcee2 - fix ci 6a84dd7 - testing 
d14ffee - new component <DragDropGridWrapper /> 
914cca3 - wip 
8796b3e - feat: replace internal library for <DragDropWrapper /> 
f6ad24c - chore: review .eslint + tsconfig 
7da219e - new dependency 'react-draggable-tags'


그 'WIP'커밋? 확실히 나는 메시지를 작성하지 않았다; 'fix-CI' 하나? 나는 그것이 일어날 것이라고 기대하지 않았습니다. 저기 '되돌리기'? 네, 너무 많은 문제를 일으켰습니다 🤷‍♀ .

Development process has these steps back. You start coding with some idea in mind; maybe you change the approach while coding; maybe you add some extra - not 100% related - boy-scouting; maybe you reinforce the coverage of a piece you're to use, etc.



문제는 마스터에 병합할 때 최종 기록이 더 좋아 보일 수 있다는 것입니다. git를 사용하면 과거를 바꿀 수 있으며 처음부터 잘한 척할 수 있습니다.

우리에게 필요한 것은 시간의 보석

$> git rebase --interactive main




예제 브랜치



시간 여행을 망치기 전에 기능 분기를 도식화합시다.


  • 프로젝트에 새 종속성을 추가합니다
  • .
  • eslinttsconfig 구성 파일에 대한 관련 없는 변경 사항
  • 기능 자체 시작: React 구성 요소의 내부 구현 변경
    4, WIP(커밋 #3 계속)
  • 여기서 접근 방식을 변경합니다. 기존 구성 요소를 변경하는 대신(아마도 어느 시점에서 더 이상 사용되지 않는 것으로 표시할 것임) 완전히 새로운 구성 요소를 만들기로 결정했습니다.
  • 새 구성 요소에 대한 테스트
  • CI 수정(커밋 #6 계속)
  • 원래 구성 요소를 복구합니다(get reset 사용) 두 구성 요소를 모두 프로젝트에 유지합니다.
  • 커밋 #2에서 변경 사항 되돌리기tsconfig

    걸음마



    1. 당황하지 마십시오.



    일단 커밋하면 작업을 잃을 수 없음을 기억하십시오(*).

    상위 커밋의 참조(해시)를 저장할 수 있습니다. 이것은 초기 상황으로 돌아가기 위해 언제든지 패닉 버튼으로 사용할 수 있습니다.

    $> git reset --hard <ref>
    


    (*) there could be extreme situations like loosing the hard drive or zombie apocalypse 🧟 but you get what I mean.



    2. 'WIP' 및 '이전 수정' 스쿼싱을 시작합니다. 부모에게 커밋합니다.





    해당 커밋에 대해 단어 picks로 변경합니다. 이 예에서:

     git rebase --interactive main
    pick 7da219e new dependency 'react-draggable-tags' 
    pick f6ad24c chore: review .eslint + tsconfig 
    pick 8796b3e feat: replace internal library for <DragDropWrapper /> 
    s 914cca3 wip 
    pick d14ffee new component <DragDropGridWrapper /> 
    pick 6a84dd7 testing 
    s 7dfcee2 fix ci 
    pick ee409e7 revert DragDropWrapper (recover prev. code) 
    pick f6dec33 chore: revert tsconfig
    


    찌그러뜨리면 결과 메시지를 묻는 메시지가 표시됩니다. 이 경우 커밋 메시지 #2를 두 번 모두 버립니다.



    3. 관련된 모든 커밋을 함께 배치(이동)합니다.



    이 예에서는 최상위 커밋을 해당 커밋 바로 뒤에 옮깁니다. 게다가 테스트 커밋을 부모에게 스쿼시하고 있습니다.





    4. 계속 짓누르기



    이제 우리는 이 3개를 가지고 있습니다 - 그것들을 '섹션'이라고 부르겠습니다. 우리가 마지막으로 스쿼시를 할 수 있다는 것이 공평해 보입니다.



    Note: with rebase you may get merge conflicts (exactly the same way you face conflicts with git merge). 
    My recommendation is to keep focused on "How will this code look like in the final picture?"; pretend you did nailed it from the beginning.



    5. 마무리 💅. (r) 커밋 메시지를 다시 작성할 기회를 잡으십시오.



    개인적으로 저는 Semantic Commit Messages를 사용합니다. 하지만 다른 시간에 다룰 수 있습니다.

    목욕 후 🧽 우리 지점입니다. 훨씬 낫죠?

    $> git log --pretty=format:'%h - %s' main..feature/drag-n-drop-grid
    a3f5f33 - feat: new component <DragDropGridWrapper />
    f6ad24c - chore: review .eslint
    7da219e - chore: new dependency 'react-draggable-tags'
    



    TL; DR


  • 당황하지 마십시오. 일단 커밋하면 작업을 잃을 수 없습니다. 해시를 복사하는 패닉 버튼을 준비할 수 있습니다.

  • "WIP"및 "Fix prev. commit"을 부모에게 스쿼시합니다.
  • 관련된 모든 커밋을 함께 배치(이동)합니다.
  • (해당하는 경우) 계속 찌그러뜨리십시오.

  • Reword(r) 커밋 메시지.

  • - Thanks for reading 💚.

    좋은 웹페이지 즐겨찾기