[ 5일 완성 코스 2일차 ]
03장 깃과 브랜치
03-1 브랜치란?
버전 관리 시스템에서는 줄기를 뻗듯이 여러 갈래로 펴져 가는 데이터 흐름을 말함
브랜치 기능
1. 분기
2. 병합
03-2 브랜치 만들기
$ git branch
branch 들의 정보를 확인 할 때 사용
$ git branch apple
현재 저장소에 있는 데이터 들을 그대로 가지고 다른 갈래의 branch가 생성 됨
HEAD branch인 master를 branch 해서 apple branch를 생성
브랜치 사이 이동하기
$ git switch
// 예전 버전에서는 git checkout 을 사용
$ git switch apple
HEAD branch인 master 에서 apple branch로 이동
커밋 간단하게 확인하는 옵션
$ git log --oneline --branches --graph
// --oneline : 한줄씩 간단하게 커밋을 나타내줌
// --branches : 현재 git에 있는 branch들의 위치를 나타냄
// --graph : 어디서 분기 했는지 알 수 있음
graph 그림을 보면 work3에서 apple branch의 apple content 4 와 master branch의 master content 4 가 분기 했음을 알 수 있음
03-3 브랜치 정보 확인하기
새 브랜치에서 커밋하고 상태 확인
브랜치 사이의 차이점 알아보기
$ git log master..apple
// master브랜치와 apple 브랜치의 차이점을 확인 가능 (master 기준)
$ git log apple..master
// apple브랜치와 master 브랜치의 차이점을 확인 가능 (apple 기준)
03-4 브랜치 병합하기
$ cd ~
$ git init manual-2
// git init을 사용하면 mkdir manual-2 , cd manual-2 , git init 을 한번에 작업 가능
$ cd manual-2
// git init을 사용 하더라도 한번에 작업은 되지만 해당 디렉토리로 이동하는 것은 아니라서 변경해야함
서로 다른 파일 병합 하기
현재 master branch에는 master.txt, o2 branch에는 o2.txt 파일이 생성되어 있음
$ git merge o2
// git switch master에서 작업
master branch에서 o2를 병합 했을 경우 merge message를 입력하면 파일이 다른 경우 그대로 병합 처리됨.
같은 문서의 다른 위치를 수정했을 때 병합하기
$ vim work.txt
// 하단은 work.txt 파일 내용
#title1
content1
#title2
content2
master 에서는 content1 부분을 master content 로 수정
o2 에서는 content2 부분을 o2 content 로 수정
$ git merge o2
// master branch에서 실행
다른 파일 병합할 때와 마찬가지로 merge meaage를 입력하면 그대로 병합처리 됨.
$ cat work.txt
// 하단은 work.txt 파일 내용
#title1
master content
#title2
o2 content
같은 문서의 같은 위치를 수정했을 때 병합하기
$ vim work.txt
// 하단은 work.txt 파일 내용
#title
content
master, o2 에서 content 부분을 master content, o2 content 로 수정
$ git merge o2
// master branch에서 실행
(master|MERGING) 이라고 변경되는 것을 볼 수있음
충돌이 생긴 work.txt에서 직접 처리 해야 merge를 완료 할 수 있음
$ vim work.txt
// 하단은 work.txt 파일 내용
#title
content
<<<<<<< HEAD
master content
=======
o2 content
>>>>>>> o2
work.txt 파일을 봤을때 충돌 나는 부분은 <<<<< ===== >>>>> 부분으로 표시 되어 있는 것을 볼 수있음
해당 내용들을 직접 수정 처리
$ vim work.txt
// 하단은 work.txt 파일 내용
#title
content
master content
o2 content
직접 수정 처리를 하고 저장소로 commit을 시키면 merge처리가 완료된다.
처리 후에는 master|MERGING이 다시 master로 변경된 것을 볼 수있다.
만약 여러개의 파일을 병합했다면 충돌이 발생한 파일을 제외하고는 자동으로 master branch에 병합됨
병합이 끝난 브랜치 삭제하기
$ git branch -d o2
삭제 된 branch는 다시 같은 이름으로 (o2)로 branch를 생성하게 되면은 삭제 전 데이터로 다시 불러 올 수 있음
실제로 삭제된것이 아니라 git 흐름 속에 감추는 것으로 생각하면 됨
03-5 브랜치 관리하기
브랜치에서 switch와 reset의 작동 원리
master branch가 c1.txt 파일을 을 commit하고 sub branch를 생성하고 master branch에 c2.txt파일을 새로 commit 함
그리고 sub branch에서 s1.txt파일을 생성 했을때 현재 master는 c2.txt가 있는 두번째 commit을 가르키고 있고, sub branch는 s1.txt가 있는 commit을 가르키고 있음
$ git reset 47ae2ef
// 47ae2ef 는 (master)가 가르키고 있는 c2 commit의 hash 값
원래 sub는 s1 commit을 가르키고 있었지만 reset을 처리하면서 master가 가르키고 있는 c2 commit을 가르키게 됨
정리
어떤 branch에 있는 commit 이든 지정 할 수있으며, 명령을 수행한 뒤에는 branch와 연결이 끊긴 커밋은 삭제 됨
수정 중인 파일 감추기 및 되돌리기 - git stash
브랜치에서 파일을 수정하고 커밋하지 않은 상태에서 급하게 다른 파일을 커밋해야 할 경우
급한대로 그냥 두어도 상관은 없지만 계속 커밋하라는 메시지가 출력되어 번거롭기 때문에 잠시 감추고 당장 필요한 작업을 우선 처리하고 다시 꺼내올 수있음.
현재 f1.txt, f2.txt가 스테이징 되지 않고 파일 수정만 된 상태
$ git stash
git stash를 한다음 status를 보면 tree가 clean인 것을 볼 수있음
stash상태에서 다른 용무를 처리 하고 나서 다시 수정 파일을 불러올 수 있음
$ git stash pop
'Git' 카테고리의 다른 글
깃허브로 협업하기, 깃허브에서 개발자와 소통하기 (0) | 2022.01.04 |
---|---|
깃허브로 백업하기 (0) | 2021.12.30 |
Git 시작하기, 깃으로 버전 관리하기 (0) | 2021.12.28 |