CI/CD를 katacoda로 체험(초보자용) - Part9(Re-writing History)

CI/CD 입문



이 페이지에서는, 카타코다 라고 하는 「브라우저로부터 무료로 공부용의 인스턴스를 기동할 수 있는 Web 서비스」를 이용해 CI/CD를 실천합니다
내용은 위의 링크를 따르므로 불명확한 점이 있으면 그곳에 문의하십시오.

Git 버전 관리 정보 - Scenario 9 - Re-writing History



여기에서는 CI/CD로 빼놓을 수 없는 Git에 의한 버전 관리에 대해 배웁니다.
이 시나리오에서 학습을 빨리 확인하려면 개요를 확인하십시오.
이해에 실수 등이 있으면 꼭 지적하십시오.

개요


  • git rebase --interactive (--root)에서 저장소 내역 변경 가능
  • 리포지토리 변경 방법의 흐름
  • git rebase --interactive (--root) (hash)
  • 대상 버전에 대한 작업 (명령 등) 요청
  • 구체적인 변경 내용의 기술

  • e.g) commit 주석 변경
  • e.g) 커밋 통합
  • e.g) commit 순서 바꾸기
  • e.g) 커밋 분할

  • Amending Commit Messages



    리포지토리 내역의 가독성을 향상시키기 위해 git rebase를 사용하여 구성
    이번 시나리오는 커밋 내용 변경
    초기 상태의 커밋 이력은 다음과 같습니다.
    $ git log --oneline
    ESC[33m254883aESC[mESC[33m (ESC[mESC[1;36mHEAD -> ESC[mESC[1;32mmasterESC[mESC[33m)ESC[m Final Item
    ESC[33mb1a5bb4ESC[m New Item
    ESC[33m0c3ff30ESC[m Initial comit of the list
    
    git rebase --interactive --root 에서 대화식 모드에서 루트 사용자로 리포지토리 편집
    이 명령을 입력하면 다음과 같은 Vim이 시작됩니다.



    이번에는 "comit"라고 댓글을 달고 있는 커밋을 편집하기 때문에 아래와 같이 reword 를 요구해 esc , :wq


    그러면 새롭게 다음과 같은 Vim이 일어납니다.



    여기서 "reword"요청 커밋 메시지를 변경할 수 있습니다.
    이번은 아래와 같이, comit -> commit 로 변경



    terminal로 돌아 오면 변경 사항이 반영됩니다.
    $ git rebase --interactive --root
    [detached HEAD d1cc84f] Initial commit of the list
     Date: Tue Oct 20 07:21:12 2020 +0000
     1 file changed, 5 insertions(+)
     create mode 100644 list.html
    Successfully rebased and updated refs/heads/master.
    $ git log --oneline
    ESC[33m8081e1dESC[mESC[33m (ESC[mESC[1;36mHEAD -> ESC[mESC[1;32mmasterESC[mESC[33m)ESC[m Final Item
    ESC[33mc6dc2adESC[m New Item
    ESC[33md1cc84fESC[m Initial commit of the list   //"comit"->"commit"
    

    Squash Commits



    다음 시나리오에서는 여러 커밋을 하나로 결합합니다.
    리포지토리의 초기 상태는 다음과 같습니다.
    $ git log --oneline
    ESC[33m1cf8e31ESC[mESC[33m (ESC[mESC[1;36mHEAD -> ESC[mESC[1;32mmasterESC[mESC[33m)ESC[m TODO
    ESC[33ma340728ESC[m TODO
    ESC[33m901fe75ESC[m TODO
    ESC[33m6b4db09ESC[m TODO
    ESC[33mfbf4a5dESC[m TODO
    ESC[33m52204d0ESC[m TODO
    ESC[33mf8f4e01ESC[m TODO
    ESC[33m260d2cbESC[m TODO
    ESC[33m3a1f752ESC[m Final Item
    ESC[33mf74f00dESC[m New Item
    ESC[33mfabfbbaESC[m Initial comit of the list
    $ git rebase --interactive HEAD~8
    

    이번에는 이전 커밋에 다른 커밋을 융합하기 때문에 squash/s


    그런 다음 아래와 같이 첫 번째 커밋 메시지 만 남기고 저장


    [detached HEAD d957dad] TODO
     Date: Tue Oct 20 07:43:38 2020 +0000
     1 file changed, 8 insertions(+)
     create mode 100644 TODO
    Successfully rebased and updated refs/heads/master.
    $ git log --oneline
    ESC[33md957dadESC[mESC[33m (ESC[mESC[1;36mHEAD -> ESC[mESC[1;32mmasterESC[mESC[33m)ESC[m TODO
    ESC[33m3a1f752ESC[m Final Item
    ESC[33mf74f00dESC[m New Item
    ESC[33mfabfbbaESC[m Initial comit of the list
    

    commit 메시지가 "TODO"하나로 변경되었는지 확인

    Re-order Commits



    다음 시나리오에서는 커밋 순서를 바꿉니다.
    리포지토리의 초기 상태는 다음과 같습니다.
    $ git log --oneline
    ESC[33m356b8fdESC[mESC[33m (ESC[mESC[1;36mHEAD -> ESC[mESC[1;32mmasterESC[mESC[33m)ESC[m Adding File 1
    ESC[33maa0b258ESC[m Adding File 2
    ESC[33md957dadESC[m TODO
    ESC[33m3a1f752ESC[m Final Item
    ESC[33mf74f00dESC[m New Item
    ESC[33mfabfbbaESC[m Initial comit of the list
    $ git rebase --interactive HEAD~2
    

    이번에는 "pick"요청으로 남을 수 있지만 순서만 바꿉니다.
    Successfully rebased and updated refs/heads/master.
    $ git log --oneline
    ESC[33md49ad2bESC[mESC[33m (ESC[mESC[1;36mHEAD -> ESC[mESC[1;32mmasterESC[mESC[33m)ESC[m Adding File 2
    ESC[33mb533037ESC[m Adding File 1
    ESC[33md957dadESC[m TODO
    ESC[33m3a1f752ESC[m Final Item
    ESC[33mf74f00dESC[m New Item
    ESC[33mfabfbbaESC[m Initial comit of the list
    

    Split Commit



    다음 시나리오에서는 커밋 분할
    리포지토리의 초기 상태는 다음과 같습니다.
    $ git log --oneline
    ESC[33me957a8bESC[mESC[33m (ESC[mESC[1;36mHEAD -> ESC[mESC[1;32mmasterESC[mESC[33m)ESC[m Adding Fil
    ESC[33m6141321ESC[m Adding File 1
    ESC[33mb150469ESC[m Adding File 2
    ESC[33m2f349e4ESC[m TODO
    ESC[33me5a591fESC[m TODO
    ESC[33mf7de1a0ESC[m TODO
    ESC[33m5637843ESC[m TODO
    ESC[33m0c4df92ESC[m TODO
    ESC[33m846e96dESC[m TODO
    ESC[33mec5bac6ESC[m TODO
    ESC[33m69440bcESC[m TODO
    ESC[33me5197fdESC[m Final Item
    ESC[33mdbef64cESC[m New Item
    ESC[33md6dc0e6ESC[m Initial comit of the list
    $ git rebase --interactive HEAD~1
    



    이번에는 rebaseedit


    아래 결과와 같이 일시적으로 rebase
    Stopped at e957a8b...  Adding File 3 and File 4
    You can amend the commit now, with
    
      git commit --amend
    
    Once you are satisfied with your changes, run
    
      git rebase --continue
    $ git reset HEAD^   //分割commitをリセット
    $ git add file3.txt
    $ git commit -m "File 3"
    [detached HEAD f491f57] File 3
     1 file changed, 1 insertion(+)
     create mode 100644 file3.txt
    $ git add file4.txt
    $ git commit -m "File 4"
    [detached HEAD 67edd65] File 4
     1 file changed, 1 insertion(+)
     create mode 100644 file4.txt
    $ git rebase --continue   //一時停止していたrebaseを再度実行
    Successfully rebased and updated refs/heads/master.
    $ git log --oneline
    ESC[33m67edd65ESC[mESC[33m (ESC[mESC[1;36mHEAD -> ESC[mESC[1;32mmasterESC[mESC[33m)ESC[m File 4
    ESC[33mf491f57ESC[m File 3
    ESC[33m6141321ESC[m Adding File 1
    ESC[33mb150469ESC[m Adding File 2
    ESC[33m2f349e4ESC[m TODO
    ESC[33me5a591fESC[m TODO
    ESC[33mf7de1a0ESC[m TODO
    ESC[33m5637843ESC[m TODO
    ESC[33m0c4df92ESC[m TODO
    ESC[33m846e96dESC[m TODO
    ESC[33mec5bac6ESC[m TODO
    ESC[33m69440bcESC[m TODO
    ESC[33me5197fdESC[m Final Item
    ESC[33mdbef64cESC[m New Item
    ESC[33md6dc0e6ESC[m Initial comit of the list
    

    위의 결과와 같이 rebase

    좋은 웹페이지 즐겨찾기