깃과 브랜치 공부 2일차
브랜치
master브랜치에서 뻗어 나오는 새 브랜치를 만드는 것을 분기(branch)한다 라고한다. 새 브랜치에서 원하는 작업을 끝내고 분기했던 브랜치를 master 브랜치에 합치는 것을 병합(merge) 한다고 한다.
- 만약 브랜치를 사용하지 않으면 프로젝트 각각의 디렉토리를 만들고 manual 디렉토리를 복사해서 사용해야하고 이는 곧 여러 문제를 일으킬 수 있음.
새 브랜치 만들기
$ git branch 새브랜치
-
git branch로 확인해보면 master , 새브랜치 이렇게 두 종류가 보임.
master앞에 는 현재 master브랜치에서 작업중이라는 의미. -
git log로도 확인 가능. HEAD -> master,새브랜치 이렇게 나오고, 현재 master 브랜치에서 작업 중이라는 의미.
브랜치 사이 이동하기 : git checkout
$ 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 뒤에 디렉토리 이름을 넣으면 새로운 디렉토리를 만들고 저장소를 초기화하는 과정을 한번에 할 수 있다.
$git init newDirectory
- 홈 디렉토리에 새로운 디렉토리 만들고, 거기서 빔을 이용해 work 텍스트파일 만들고 저장
$ cd~
$ git init manual-2
$ cd manual-2
$ vim work.txt
$ git add work.txt
$ git commit -m 'work1'
-> HEAD가 master 브랜치를 가르키고, master가 work1 커밋을 가르킨다.
- o2 브랜치 만들기
$ 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로 머지된거 확인하기
같은 문서의 다른 위치를 수정했을 때 병합하기
- master 브랜치와 o2 브랜치에는 똑같이 work.txt 파일이 있음. 양쪽 브랜치에서 work.txt 문서를 수정하되 서로 다른 위치를 수정한 후 브랜치를 병합해보면 어떤 결과가 나올까
- 홈디렉토리에서 manual-3라는 깃 저장소 만들고 디렉토리 이동하기
- 빔에서 work.txt 파일 만들고, 커밋메시지 work 1로 커밋.
- o2 브랜치 만들기 ( o2브랜치와 master브랜치에는 work 1 커밋이 존재하게 된다.)
4.master 브랜치에서 work.txt 수정하고, 커밋메시지 master work 2로 커밋.
'''
#title
content
master content 2
#title
content
_
''' - o2 브랜치로 체크아웃하고 work.txt 파일 수정하고, 커밋 메시지 o2 work 2로 커밋.
'''
#title
content_
#title
content
o2 content 2
_
''' - o2 브랜치를 master브랜치에 합치기 위해 master 브랜치로 체크아웃.
- git merge 명령 이용해서 o2브랜치를 master 브랜치로 불러온다.
- 병합시에는 서로 위치가 달라서 conflict 문제가 발생하지 않고, 자연스럽게 Auto-merging work.txt로 시작하는 병합 완료 메시지가 출력됌. cat 명령어로 파일 확인해보자.
'''
#title
content
master content 2
_
#title
content
o2 content 2
'''
같은 문서의 같은 위치를 수정했을 때 병합하기
-
홈디렉토리에서 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를 사용해 강제로 삭제)
브랜치 관리하기
- master 브랜치에서 c1 커밋. HEAD->master, master->c1 을 가르킴.
- sub 브랜치를 만들면, 새로만든 브랜치 또한 c1 커밋을 가르킴.
- 마스터 브랜치에서 c2를 새로 커밋하면 master는 c2를 sub은 c1을 가르킴.
- git checkout sub 으로 sub 브랜치로 들어간다. 빔을 이용해서 s1을 커밋한다.
- git log --oneline --branches 명령어로 c2의 해시값을 뽑아내고, git reset 해시값을 입력하면 sub 브랜치의 최신 커밋이 master 브랜치의 최신 커밋인 c2로 바뀐다.
- gitlog --oneline --branches로 살펴보면 HEAD ->sub,master로 바뀌어있음을 볼 수 있다. 이렇게 git reset을 사용하면 브랜치 사이를 넘나들면서 제어할 수 있음. sub 브랜치는 이제 c2 커밋을 가르키고 있음으로 원래 가르키던 s1 커밋은 연결이 끊기면서 삭제된다.
수정 중인 파일 감추기 및 되돌리기 : git stash
- git stash 명령을 사용하려면 파일이 tracked 상태여야함. 즉, 한번은 커밋이 된 상태여야 한다.
- 어떤 파일을 수정하던 중 급하게 다른 파일을 커밋해야 할 경우 사용
- git stash 명령을 입력하면 수정중이던 파일이 어떤 공간으로 들어가서 임시 저장된다.
- git stash list 명령을 통해, 감춘 파일 목록을 확인할 수 있는데 스택으로 저장되며 stach{0}이 가장 최근파일, 새로운 파일이 들어오면 1..2..3..으로 점점 밀려나는 구조.
- git stash pop으로 가장 최근 항목을 되돌려 올 수 있다.
Author And Source
이 문제에 관하여(깃과 브랜치 공부 2일차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@seogseog/깃과-브랜치-공부-2일차저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)