master브랜치에서 뻗어 나오는 새 브랜치를 만드는 것을 분기(branch)한다 라고한다. 새 브랜치에서 원하는 작업을 끝내고 분기했던 브랜치를 master 브랜치에 합치는 것을 병합(merge) 한다고 한다.
$ git branch 새브랜치
git branch로 확인해보면 master , 새브랜치 이렇게 두 종류가 보임.
master앞에 는 현재 master브랜치에서 작업중이라는 의미.
git log로도 확인 가능. HEAD -> master,새브랜치 이렇게 나오고, 현재 master 브랜치에서 작업 중이라는 의미.
$ git checkout 브랜치
커밋을 마친 상태에서 브랜치하면 새로 만든 브랜치도 당연히 최신 커밋 상태를 나타낸다.
새로운 내용을 커밋해보고 로그확인해보면 새로 만든 브랜치는 이전의 커밋내용 상태에서 머무르고, master 브랜치는 새로운 커밋내용 상태를 반영하고 있다.
$git log --oneline (oneline 옵션 사용하면 커밋 간략히 확인할때 좋음)
여기서 새 브랜치로 이동해보면 master 브랜치에서 새 브랜치로 분기하기 전까지 master 브랜치에 있던 커밋들은 그대로 새 브랜치에 복사된 것을 확인할 수 있다. 또 최신 커밋 해시에서 HEAD는 새 브랜치를 가르킨다.
-> 즉, 새 브랜치가 master 브랜치에서 분기된 이후에 master 브랜치에 추가된 커밋은 새 브랜치에 영향을 미치지 않는다!
$git add . -> 수정된 파일 전부를 스테이지에 올릴 수 있음
$git add -A 과 똑같은 건지 잘 모르겠음
$ git log --oneline --branches 옵션을 사용하면 각 브랜치의 커밋을 함께 볼 수 있다.
$ git log --oneline --branches --graph 옵션을 사용하면 수직선과 점선들로 어떤 커밋상태에서 분기되어 나왔는지 커밋의 부모를 보여준다.
$git log 브랜치1..브랜치2
-> 브랜치1을 기준으로 브랜치1에는 없고 브랜치2에 있는 것을 보여준다.
$git init newDirectory
$ cd~
$ git init manual-2
$ cd manual-2
$ vim work.txt
$ git add work.txt
$ git commit -m 'work1'
-> HEAD가 master 브랜치를 가르키고, master가 work1 커밋을 가르킨다.
$ git branch o2
-> o2가 work1 커밋을 가르킴.
master 브랜치에 master.txt파일 만들고 커밋
(주의: git commit -am '내용' 은 untracked 상태에서는 사용못하는 듯함.)
$ vim master.txt
$ git add master.txt
$ git commit -m 'master work 2'
master가 master work 2 커밋을 가르킴.
o2브랜치로 체크아웃
$ git checkout o2
o2 브랜치에서 o2.txt 파일 만들고 커밋.
$ vim o2.txt
$ git add o2.txt
$ git commit -m 'o2 work 2'
-> o2가 o2 work 2 커밋을 가르킴. HEAD가 o2 브랜치를 가르킴.
o2브랜치에서 작업이 끝났으면 o2 브랜치 내용을 master브랜치로 병합하기
a. 먼저 master 브랜치로 이동
> $ git checkout master
b. 병합하려는 브랜치 이름 가져옴.
> $ git merge o2
> $ git merge o2 --edit (편집기 창을 꺼내고 싶으면 옵션 추가)
Merge branch o2 라고 자동 커밋된다.
-> HEAD가 master 브랜치를 가르킴. master가 Merge branch o2 커밋을 가르킴.
git log --oneline --branches --graph로 머지된거 확인하기
홈디렉토리에서 manual-4라는 깃 저장소 만들고 디렉토리 이동하기
빔에서 work.txt 파일 만들고, 커밋메시지 work 1로 커밋.
o2 브랜치 만들기 ( o2브랜치와 master브랜치에는 work 1 커밋이 존재하게 된다.)
master 브랜치에서 work.txt 수정하고, 커밋메시지 master work 2로 커밋.
'''
#title
content
master content 2
#title
content
_
'''
o2 브랜치로 체크아웃하고 work.txt 파일 수정하고, 커밋 메시지 o2 work 2로 커밋.
'''
#title
content
o2 content 2
#title
content
'''
o2 브랜치를 master브랜치에 합치기 위해 master 브랜치로 체크아웃.
git merge 명령 이용해서 o2브랜치를 master 브랜치로 불러온다.
병합시에는 위치가 같아서 conflict 문제가 발생한다. 빔으로 파일을 열어서 내용을 직접 수정해줘야한다.
-> 브랜치를 삭제하려면 master 브랜치에서 해야함. master 브랜치로 체크아웃하고 -d옵션 사용해서 o2브랜치 삭제한다.
$git branch -d o2
(만약 브랜치 병합을 진행하지 않은 브랜치를 삭제하려 할 경우 오류가 뜸. 이때는 -D를 사용해 강제로 삭제)