$ 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
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를 파악하기 깔끔 하다.
오류 메세지 : CONFLICT (content): Merge conflict in [hello.py](http://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 의 싱크를 맞춰준다.
** 꼭 필요한 브랜치만 남겨주고 가벼운 작업은 생애주기가 끝나면 바로바로 삭제하도록..