개발일기

[Git] Command 이론 정리 (Cherry-Pick, HEAD, Reset, Revert)

미냠 2023. 11. 9. 22:35
반응형

Git Command 이론 정리

  1. Cherry-Pick
  2. Head
  3. Reset, Revert

Cherry-Pick

  • 한 브랜치의 특정 커밋만 다른 브랜치의 최신 커밋으로 추가

    [Merge와 Cherry-pick의 차이점]


  • git command

     git cherry-pick <commit ID>
  • Cherry-pick 사용법

    1. 현재 사용중인 브랜치에 커밋 푸시 및 commit ID 복사
      git add .
      git commit -m "test"
      git push
      git log -> commit ID 확인 및 복사  
    2. cherry-pick을 적용할 대상 브랜치로 checkout
      git checkout <대상브랜치>
    3. Cherry-pick command로 commit 추가
      git cherry-pick -e <commit ID>
      • -e 옵션을 사용하면 commit message 수정 가능
    4. 브랜치에 commit 내용 반영
      git push
  • Cherry-pick Conflict 해결

    • Cherry-pick 중단
      git cherry-pick --abort 
    • 충돌난 파일 수정 후 실행
      git add .
      git cherry-pick --continue
      git push 

HEAD

  • HEAD는 현재 체크아웃된 브랜치의 가장 최근 커밋, 특정 브랜치의 마지막 커밋에 대한 포인터

  • HEAD가 분리되는 과정

    1. 3번의 commit을 진행한 상태의 master 브랜치

      [HEAD는 master 브랜치의 세번째 commit에 있음]

    2. 새로운 highlevel 브랜치 생성

      [matser브랜치의 HEAD가 가리키던 커밋에서 생성]

    3. 새로 생성된 highlevel 브랜치로 Checkout

      [HEAD가 highlevel브랜치의 가장 최신 커밋으로 이동]

    4. highlevel 브랜치의 새로운 commit 생성

      [HEAD가 highlevel브랜치의 가장 최신 커밋으로 이동]

    5. master 브랜치로 Checkout

      [HEAD가 master 브랜치의 가장 최신 커밋으로 이동]

    6. master 브랜치의 새로운 commit 생성

      [코드의 흐름이 분리, 분기하다]

    7. master 브랜치에 highlevel 브랜치 merge

      [highlevel에서 작업한 commit이 master에 새로운 commit으로 추가, HEAD는 master 브랜치의 가장 최근 commit에 있음]

Reset, Revert

  • Reset

    • 현재보다 이전의 특정 commit으로 되돌리는 것, HEAD까지 체크아웃된 브랜치의 특정 commit으로 이동하며 삭제된 commit의 log 또한 사라짐

    • 동작 과정

      1. 현재 Commit 상태
      2. Commit B 까지 Commit reset (Commit log 까지 삭제)
      • git command

         git reset --hard a0fvf8
        
         // commit된 파일들을 staging area로 돌려놓음 (commit 하기 전 상태, git status로 수정된 파일 확인 가능)
         git reset --soft [commit ID]
         // commit된 파일들을 working directory로 돌려놓음 (add 하기 전 상태, git status로 수정된 파일 확인 가능)
         git reset --mixed [commit ID]
         // commit된 파일들 중 tracked 파일들을 완전 삭제 (수정된 파일 확인 불가능, 단 Untracked 파일은 여전히 Untracked로 남음)
         git reset --hard [commit ID] 
  • Revert

    • 현재보다 이전의 특정 commit만을 되돌리는 것, 그리고 특정 commit이 되돌려진 것은 새로운 commmit으로 생성되며 HEAD는 체크아웃된 브랜치의 가장 최근 commit을 가리킴
    • 동작 과정
      1. 현재 Commit 상태
      2. Commit D와 C를 Revert 하여 Commit B로 되돌아감

        [Revert된 순서대로 D', C' Commit이 생성되고 HEAD는 가장 최근 Commit을 가리킴]

        • git command
          git revert 5lk4er // D 커밋 revert
          git revert 76sdeb // C 커밋 revert
          git revert [commit ID] 
반응형