DEV

git - pull/fetch, merge/rebase, reset/revert 개념 정리

블린더르 2021. 5. 27. 17:19

pull / fetch

pull

원격 저장소의 변경 사항을 현재 브랜치에 통합시킵니다

git fetchgit merge FETCH_HEAD 를 한 것과 동일합니다.

https://git-scm.com/docs/git-pull

fetch

원격 저장소에서 객체 및 참조(커밋, 태그)를 다운로드 하고 로컬 저장소에 병합되지는 않습니다.

fetch 를 하게 되면 .git/FETCH_HEAD 에 fetch 로 다운받은 내용이 기록됩니다.

https://git-scm.com/docs/git-fetch

merge / rebase

merge

두개의 브랜치를 병합합니다.

        A---B---C topic
       /
D---E---F---G master

----------- merge ------------

      A---B---C topic
       /         \
D---E---F---G---H master

meger 가 되어 새로운 merge 커밋 H 가 생성됩니다

fast-forward merge

A 브랜치를 B 브랜치로 병합할 때 B 브랜치가 A 브랜치 이후 커밋을 가리키고 있으면 fast-forward merge 가 되며 merge 과정 없이 최신 커밋으로 이동하게 됩니다

        A---B---C topic
       /
D---E master

----------- merge ------------

      A---B---C master, topic
       /         
D---E

https://git-scm.com/docs/git-merge

https://git-scm.com/book/ko/v2/Git-브랜치-브랜치와-Merge-의-기초

rebase

rebase 는 브랜치의 base 를 다시 정의하는 것 입니다.

rebase 를 이용하여 브랜치를 합칠 수 있으며 다른 브랜치에서 갈라져 나온 브랜치만 가져와서 합치거나 여러개의 커밋을 합칠 수도 있습니다.

          A---B topic (checkout)
         /
D---E---F---G master 

----------- rebase ------------

              A'--B' topic
             /
D---E---F---G master

-------- fast-forward ---------

              A'--B' master, topic
             /
D---E---F---G 

작동 방식

  • 브랜치가 나뉘기 전 공통 커밋(F)으로 이동하고 공통 커밋부터 checkout 한 브랜치가 가리키는 커밋까지 diff 를 만들어 임시로 저장합니다.
  • rebase 할 브랜치(topic) 가 합칠 브랜치(master) 가 가리키는 커밋을 가리키게 하고 임시로 저장된 diff 를 차례대로 적용합니다. (A', B')
  • master 브랜치를 fast-forward 합니다.

https://git-scm.com/docs/git-rebase

https://git-scm.com/book/ko/v2/Git-브랜치-Rebase-하기

https://backlog.com/git-tutorial/kr/stepup/stepup7_5.html

reset / revert

reset

현재 HEAD 를 지정된 상태로 재설정합니다.

  • —soft : HEAD는 현재 브랜치를 가리키고 브랜치가 가리키는 커밋을 변경합니다. git commit 명령을 되돌립니다.
  • —mixed : Index 를 현재 HEAD 가 가리키고 있는 스냅샷으로 업데이트합니다. git add 명령까지 되돌립니다.
  • —hard : git commit, git add 으로 생성된 커밋을 되돌리고 워킹 디렉토리 내용까지 되돌립니다.

https://git-scm.com/docs/git-reset
https://git-scm.com/book/ko/v2/Git-도구-Reset-명확히-알고-가기

revert

일부 커밋을 되돌립니다.

이전 커밋 내역을 남겨두고 커밋을 취소하는 커밋을 생성합니다.

https://git-scm.com/docs/git-revert

https://backlog.com/git-tutorial/kr/stepup/stepup7_2.html

부족하거나 틀린 부분은 댓글로 남겨주시면 감사하겠습니다.

반응형