브랜치를 왜 꼭 써야할까?
- 브랜치를 따로 만들지 않으면 마스터 한 줄기에서 계속해서 커밋이 발생
- 보통 마스터 브랜치는 코드가 검증이 되고, 문제가 없는 내용들만 포함되야함.
- 보통 feature A라는 새로운 기능이 있는 코드가 작성이 되면 feature A라는 브랜치에서 작업을 하는게 보통이다.
- 작업이 다 끝나면 feature A 브랜치를 삭제 시키고 master 브랜치에 병합시킴.
- 하지만 feature A의 커밋 이력들을 전부 머지하면 더러워지기 때문에, feature A의 모든 커밋을 하나로 합쳐서 하나의 커밋으로 만든 후, 머지시킨다.
브랜치
만들어져있는 브랜치 확인하기
- 커밋 히스토리를 보면 위의 그림처럼 마스터 브랜치가 작업한 것과, fix가 작업한 것이 나누어져 있다.
- git branch 라는 명령어를 통해 현재 어떤 브랜치가 있는지 확인해보자.
- 현재 레포지토리에 총 3개의 브랜치가 있는 것을 확인할 수 있다.
- 그런데 git branch 명령어는 로컬 레포지토리의 브랜치들만 보여준다.
- 원격 저장소의 모든 branch를 보고 싶다면??
- git branch --all 이라는 명령어를 통해 볼 수 있다.
새로운 브랜치 만들기
- git brach "만들고자 하는 브랜치의 이름"
- 현재 new-branch라는 새로운 브랜치를 만든것이다.
- 히스토리를 확인해보자
- 새로 만든 브랜치인 new-branch가 마지막 커밋을 가리키고 있는 것을 볼 수 있다.
브랜치 이동(switch)
- git switch -C "새로 만들고 이동할 브랜치명"
- 만들고 바로 이동하기 위한 명령어이다.
브랜치 이동(checkout)
- git checkout "이동할 커밋 해시태그"
- 이러면 해당 해시태그의 커밋으로 이동한다.
- git checkout 브랜치명
- 이렇게 하면 HEAD가 해당 브랜치를 가리키게 된다.
- 히스토리를 보면 그림처럼 HEAD가 이동한 브랜치를 가리키게 된다.
- git checkout -b 새로 만들고 이동할 브랜치명
- 위에서 봤던 switch -C 와 같은 역할을 한다.
각 브랜치들의 커밋 확인
- git branch -v
- 각 브랜치들의 커밋 내역 확인
현재 브랜치의 머지가 된 브랜치들 확인
- git branch --merged
- 현재 브랜치의 머지가 된 브랜치들을 확인할 수 있다.
- master 밑의 브랜치들은 커밋 내역이 아예 없기 때문에 머지가 되었다고 나온다.
- git branch --no-merged
- 이렇게 되면 master 브랜치에 머지가 되어 있지 않은 즉, master 브랜치에서 파생된 다른 변경사항이 있는 브랜치를 나타내준다.
- 히스토리를 보면 master 브랜치에서 파생된 fix 브랜치가 위의 그림에서 보듯 옆으로 튀어나와서 master에 머지가 되어 있지 않음을 볼 수 있다.
master 브랜치로 merge하기
- git merge 병합할 브랜치명
- 이러면 fix 브랜치가 master 브랜치로 병합이 된다.
브랜치 지우기
만약 지울 브랜치가 원격에도 있는 브랜치라면?
- git push origin --delete new-branch2
브랜치의 이름 변경
- git branch --move 현재브랜치명 바꿀브랜치명
- git branch --move fix fix-welcome
바꾼 브랜치의 이름을 원격에 업데이트 하기
- git push --set-upstream origin fix-welcome
브랜치와 브랜치 사이의 커밋 확인
- git log master..test
- master 브랜치와 test 브랜치 사이의 커밋들만 확인
브랜치와 브랜치 사이의 변경 코드 확인
- git diff master..test
- master 브랜치와 test 브랜치 사이의 변경된 코드 확인
총정리
- test 브랜치 만들기
- test 브랜치에서 test라는 글자가 쓰여진 test.txt 파일 생성
- commit 하기
- master 브랜치로 이동 후, test 브랜치와 master 브랜치 사이의 변경사항 확인
- test 브랜치의 결과물 master 브랜치로 merge
- test 브랜치 삭제
git checkout -b test
echo test > test.txt
git add .
git commit -m "test"
git switch master
git log master..test
git diff master..test
git merge test
git branch -d test