Git | Branch 관련 개념 정리 ( command / Merge vs Rebase / conflict 핸들링)

imzzuu·2022년 6월 16일
1

📍 branch 관련 command

$ git branch 브랜치명 : 브랜치 생성

$ git switch : 브랜치 변경

$ git switch -c 브랜치명 : 브랜치 생성과 동시에 이동 (예전엔 -b)

$ git switch -d 브랜치명 : 브랜치 삭제

$ git switch -m 기존 브랜치명 바꿀 브랜치명 : 브랜치 삭제

$ git fetch : 원격(깃레포) 내용 추적 (병합(pull)x)

$ git switch -t origin/브랜치명 : 원격에서 만든 branch 받아와 local에서 사용


$ git log : 현재 브랜치 내에서의 커밋 내역 확인

$ git log --all : 모든 브랜치 내에서의 커밋 내역 확인

$ git log --all --oneline --graph --decorate : 모든 브랜치 내에서의 흐름 그래프로 확인


+ git checkout 의 history

$ git checkout : branch 변경과 워킹트리 파일 복원 혼용 → 나누게 됨

$ git switch : branch 변경

$ git restore : 워킹 트리 파일 복원 (ex. add 취소, 이전 commit 상태로 되돌리기)

📍 merge 와 rebase


(이미지 출처 : 얄팍한 코딩사전 유투브)

merge

  • 해당 작업 내용을 병합
  • 합칠 브랜치 (ex.main)에서 git merge 브랜치 이름

rebase

  • head를 최신으로 이동시켜 그 뒤로 작업 내용(commit)을 이어붙임

  • 해당 브랜치(합쳐질 브랜치)에서 git rebase 합칠 브랜치 이름 (ex.main)

  • main 에서 git merge 브랜치 이름
    rebase 한다고 해서 main과 바로 동기화 되지 않음!
    rebase 해서 붙은 포인트는 끝에 있지만, main branch는 아직 rebase 전 상태이기 때문에
    merge를 통해서 끝 포인트로 이동시키는 것

  • $ git rebase --abort : rebase 취소

  • $ git rebase --continue : rebase 해결 가능 (다음 commit conflict 수정할거임~)(git add 는 선행 되어야함)


차이점
merge 는 branch 의 내역, history 가 남는다.
rebase 는 내역이 남지 않고, main stream 으로 기록된다.
따라서, 분업이 많아서 branch가 많아질 경우엔 merge 보다 rebase 가 flow를 파악하기 깔끔 하다.

📍git merge conflict

오류 메세지 : CONFLICT (content): Merge conflict in [hello.py](http://hello.py/)

  • vim hello.py (충돌이 일어난 파일)
 <<<<<<< HEAD
 magic_num = 3
    
 if magic_num%3===0:  // main
=======        
 for _ in range(1,10+1):  // repeat-hello
 >>>>>>> repeat-hello
  print('hello')

⇒ 수정 사항 수정 후 commit

여기서 -m 사용 지양 이유
vim>> Merge branch 'repeat-hello’
Merge 시 자동으로 제목이 달린다! 엠플레그 쓰면 이게 무시됨 사용지양

$ git push -u origin repeat-hello : 리모트에 새 브랜치를 upsteam 한다.
-u flag 가 remote와 local 의 싱크를 맞춰준다.
** 꼭 필요한 브랜치만 남겨주고 가벼운 작업은 생애주기가 끝나면 바로바로 삭제하도록..

profile
FrontenDREAMER

0개의 댓글