-
git - pull/fetch, merge/rebase, reset/revert 개념 정리DEV 2021. 5. 27. 17:19
pull / fetch
pull
원격 저장소의 변경 사항을 현재 브랜치에 통합시킵니다
git fetch
후git 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
부족하거나 틀린 부분은 댓글로 남겨주시면 감사하겠습니다.
반응형'DEV' 카테고리의 다른 글
MSSQL(SQL Server) - IN 구문 사용시 매개변수 최대 값 에러 (0) 2021.07.05 iterm2 단축키 정리 (0) 2021.06.29 ansible - ubuntu 20.04 에 python2, pip 설치하기 (0) 2021.06.11 데이터베이스의 liquibase changelog 생성하기 (0) 2021.05.25 if kakao 2020 : kotest가 있다면 TDD 묻고 BDD로 가! 요약 (0) 2020.11.21