하나의 코드 관리 흐름
나뭇가지처럼
맨처음 커밋은 root commit
이를 시작으로 브랜치로 갈라짐
on branch master
레포지토리를 만들고 커밋을 하면 자동으로 생기는 브랜치
(기본, 큰 줄기)
브랜치 만들기
git branch branch_name
브랜치로 이동하기
git checkout branch_name
이후에 git status 로 어느 브랜치에 와있는지 확인가능
앞으로 작업하고 커밋하면 새로운 브랜치에만 반영됨
git branch
git branch -d 삭제할 브랜치
git checkout -b 브랜치이름
다른 브랜치에서 했던 머지 가져오고 싶을 때
(현재 합치고자 하는 branch에서)
git merge master
e.g.
현재 base 라는 브랜치에 있고, extra라는 브랜치를 합병하고자 한다.
git merge extra
머지가 성공적이라면 커밋메세지 쓰는 창이 뜸
:w (저장)
같은 내용에 다른 수정사항이 있을 때
1. 컨플릭트가 발생한 파일은 연다.
2. 머지의 결과가 되었으면 하는 모습대로 코드를 수정
3. 커밋
만약 수정하지 않고 merge 자체를 취소하려면
git merge --abort
git remote add origin [github 상 프로젝트주소]
이 커맨드에서 remote는 리모트 레포지토리에 관한 작업을 할 때 쓰는 커맨드입니다.
그리고 그 뒤의 add는 새로운 리모트 레포지토리를 등록하겠다는 뜻입니다.
그 다음에는 origin https://github.com/kyuri-dev/Math_Box.git이라고 써있죠?
이 표현은 https://github.com/kyuri-dev/Math_Box.git 리모트 레포지토리를
origin이라는 이름으로 등록하겠다는 뜻
git push -u origin master
현재 로컬 레포지토리에 있는 master 브랜치의 내용(=master 브랜치와 관계된 모든 커밋들)을 origin이라는 리모트 레포지토리로 보낸다는 뜻입
이때 같은 이름의 브랜치로 전송하게 되는데 만약 origin이라는 리모트 레포지토리에 master 브랜치가 없으면 master 브랜치를 새로 생성하고 푸시합니다.
옵션 -u: --set-upstream(-u)
로컬 레포지토리에 있는 master 브랜치가 origin에 있는 master 브랜치를 tracking(추적)하는 걸로 설정
로컬 브랜치에 대응되는 리모트 브랜치를 upstream 브랜치라고 함.
fatal: The current branch premium has no upstream branch.
To push the current branch
and set the remote as upstream,
use git push --set-upstream origin premium
HEAD는 어떤 커밋을 가리키는 존재(포인터)
Head의 위치에 따라 워킹 디렉토리의 내용이 바뀜
보통 직접 커밋을 가리키지 않고, 브랜치를 통해 간접적으로 커밋을 가리킴.
HEAD
|
branch
|
commit
Branch는 코드 관리 흐름, 커밋을 가리키는 존재(포인터)
과거 커밋 정보를 모두 가지고 있음
머지커밋: 분기 이후, 헤드가 가리키던 커밋에 다른 브랜치가 가리키던 커밋을 합쳐서 새로운 커밋을 만드는 작업
git branch [새 브랜치 이름] : 새로운 브랜치를 생성
git checkout -b [새 브랜치 이름] : 새로운 브랜치를 생성하고 그 브랜치로 바로 이동
git branch -d [기존 브랜치 이름] : 브랜치 삭제
git checkout [기존 브랜치 이름] : 그 브랜치로 이동
git merge [기존 브랜치 이름] : 현재 브랜치에 다른 브랜치를 머지
git merge --abort : 머지를 하다가 conflict가 발생했을 때, 일단은 머지 작업을 취소하고 이전 상태로 돌아감