Project/24-1 Everywhere

[Git] Git으로 협업하기 - pull(merge) vs rebase

selfdevelop 2024. 8. 13. 19:13

study/git

*브랜치 생성 및 전환

 

$ git init

: 현재 폴더(프로젝트)를 git 명령어를 사용할 수 있는 폴더로 변경한다.

 

$ git branch 브랜치명

: 브랜치(분기)를 생성한다.

 

$ git branch

: 현재 작업 중인 브랜치와 로컬 브랜치의 목록을 확인한다.

 

$ git switch 브랜치명

: 해당 브랜치로 이동한다.

 

$ git checkout -b 브랜치명

: 브랜치를 생성하고 해당 브랜치로 이동한다.

← git branch 브랜치명 + git switch 브랜치명


 

 

PLUS: git log 시, HEAD는 현재 작업 중인(위치한) 브랜치를 가르킨다.

 

 


 

*브랜치와 커밋의 관계

 

$git log --oneline

: 한 줄에 한 커밋씩 보여준다.

$git log --branches

: 각 브랜치의 최신 커밋을 보여준다.

$git log --oneline --branches

 

$git log --graph

: 특수 기호를 사용하여 시각적으로 브랜치와 커밋 내역을 보여준다

 

$git log 기준 브랜치명..비교 브랜치명

: 기준 브랜치에는 없고 비교 브랜치에만 있는 커밋을 보여준다.


 

*로컬과 원격 동기화

 

$git clone 원격url

: 원격 저장소에서 최초로 프로젝트를 복제한다.

: git remote add 원격url이 이미 수행되어 있다.

 

$git fetch

: 원격 저장소의 업데이트 내용을 가져온다.

: 그러나 소스코드를 가져와 병합(merge)하지 않는다. 

: 이후 git merge or git rebase를 통해 병합하는 과정이 필요하다.

 

$git merge 대상 브랜치명

: 현재 위치한 브랜치에 대상 브랜치를 병합한다.

//예시
$ git checkout master
$ git merge hotfix
Updating f42c576..3a0874c
Fast-forward
 index.html | 2 ++
 1 file changed, 2 insertions(+)

 

$git pull

: 원격 저장소의 업데이트 내용을 가져온다.

: 원격 저장소의 소스코드를 가져와 현재 브랜치에 병합한다. 

← git fetch + git merge

 

$git pull origin 브랜치명

: 원격 저장소의 특정 브랜치의 소스코드를 현재 브랜치에 병합한다.

 

$git rebase

: 기본적으로 git pull과 같은 기능을 수행한다

: 그러나 git pull(git merge)과 달리, 공통 조상(B)로부터 나뉜 분기를 유지하지 않고, 현재 작업 중인 브랜치를 대상 브랜치의 말단에 그대로 병합한다.

 

git merge vs git rebase


PLUS: fast forward merge

: 중간에 같은 부분을 수정한 다른 커밋이 없을 때, 현재 작업 중인 브랜치의 커밋이 기준 브랜치와 합쳐저, 다음 commit과 합쳐진다.

 

fast forward merge 이전
fast forward merge 이후

 

 

PLUS: 3ways merge

: 두 브랜치의 커밋 영역이 겹치지만, 그 내용이 다를 때 (history를 공유하지 않을 때) 수행한다.

: 두 브랜치의 공통조상과 각각의 두 브랜치가 모두 관여한다.


결론

 

CASE 1: git pull

1) git checkout -b test / git branch test → git switch test

2) git pull 

3) git log --oneline --branches    HEAD가 현재 브랜치를 가지고 있는가?

4) git add .

5) git commit -m ""

6) git push origin 현재 브랜치 (원격 저장소에 test를 반영한다)

7) PR 작성

 

CASE 2: git rebase

1) git checkout -b test / git branch test → git switch test

2) git rebase 

3) git log --oneline --branches

4) git add .

5) git commit -m ""

6) git push origin test (원격 저장소에 test를 반영한다)

7) PR 작성