[ECC Github 스터디 2주차] 3강. 깃과 브랜치
1. 브랜치란
- 브랜치(branch): 나뭇가지, 버전 관리 시스템 하에서는 여러 갈래로 퍼지는 데이터 흐름을 의미
1-1. 브랜치가 필요한 이유
[저장소마다 버전 관리를 따로 하는 경우]
➡ 비효율적인 관리 방식이다.
1-2. master 브랜치 vs main 브랜치
main
브랜치와master
브랜치 모두 git 사용 시 기본이 되는 브랜치
1-3. 브랜치 기능 살펴보기
- 사용자가 commit 할 때마다 main 브랜치는 어떤 게 최신 커밋인지 정보를 가져옴
- 브랜치는 commit을 가리키는 포인터와 비슷
- 새 브랜치 생성 시 기존 파일은 main에 유지하면서 새 브랜치에서 기존 파일 내용을 수정, 추가할 수 있음
-
분기(branch)
: main 브랜치에서 새 브랜치를 만드는 것 병합(merge)
: 분기했던 브랜치를 main 브랜치에 합치는 것
2. 브랜치 만들기 및 이동하기
2-1. 새 브랜치 만들기
git branch
: 깃에서 브랜치를 만들거나 확인하는 명령- 새로 branch를 만드려면 명령 다음에 브랜치 이름을 적으면 됨
- 현재 작업하는 브랜치 앞에 * 표시가 있음
- git log 이해하기
- 저장소에
main
과apple
이라는 2개의 브랜치가 있고,HEAD -> main
이므로 현재 작업하는 브랜치는 main임
- 저장소에
2-2. 새로운 commit 추가
- 새로 만든 커밋은 현재 작업중인 branch에만 적용되고, 나머지 브랜치에는 적용되지 x
cf>--oneline
옵션: 한 줄에 한 커밋씩 보여줄 때 사용
2-3. branch 전환하기
- 전환: 현재 브랜치에서 다른 브랜치로 이동하는 것
git switch
명령어 사용git wsitch 브랜치명
3. 브랜치 정보 확인하기
3-1. 전환한 브랜치에서 커밋하기
git add .
: 현재 저장소에서 수정 내용이 있는 파일을 한꺼번에 올릴 수 있음
3-2. 브랜치와 커밋 관계 알아보기
- git log 명령 사용 시
--branches
옵션을 추가하면 브랜치마다 최신 커밋을 한 눈에 확인 가능 -
그래프 형태로 표현하기
- 해석:
- apple 브랜치의 최신 커밋은
apple work 4
-
work 3 커밋 다음에 apple 브랜치에 커밋이 생성됨
- main 브랜치의 최신 커밋은
main work 4
- 부모 커밋이 work 3 커밋임
- apple 브랜치의 최신 커밋은
- 해석:
3-3. 브랜치 사이의 차이점 살펴보기
- git log 명령에서 브랜치 이름 사이에
..
을 넣는 명령을 통해 브랜치 간의 차이를 쉽게 확인할 수 있음- 마침표 왼쪽에 있는 브랜치를 기준으로 오른쪽 브랜치와 비교
4. 브랜치 병합하기
- 브랜치 병합(branch merge): 브랜치 작업을 마무리하고 기존 브랜치와 합치는 경우
4-1. 서로 다른 파일 병합하기
- 브랜치를 병합하기 전에 병합할 위치(branch)로 이동해야 함
git switch 브랜치명
: 브랜치 이동
git merge 브랜치
: 현재 작업 중인 branch에 해당 브랜치 병합- 자동으로 vim이 실행됨
- 커밋 메시지 수젱/삭제 가능
- 병합 과정 시각화
cf> 빨리 감기 병합
- main 브랜치에서 브랜치를 분기한 후에 main 브랜치에 아무 변화가 없는 상황에서 브랜치를 병합하는 경우
- 분기한 브랜치에서 만든 최신 커밋을 main 브랜치가 가리키게만 하면 됨
- 화면에 커밋 해시가 업데이트되었다는 내용과 함께
fast-forward
라는 메시지가 발생됨 - git merge 명령으로 단순히 포인터만 이동시킴
- 화면에 커밋 해시가 업데이트되었다는 내용과 함께
4-2. 서로 다른 브랜치에서 한 문서의 다른 부분을 수정했을 때 병합하기
- 같은 문서로 서로 다른 위치를 수정한 경우 자동으로 문서를 합쳐줌
4-3. 서로 다른 브랜치에서 한 문서의 같은 부분을 수정했을 때 병합하기
- 깃에서는 줄 단위로 문서의 변경 여부를 확인
- 서로 다른 브랜치에서 같은 줄을 수정했을 경우, 브랜치 병합 시
브랜치 충돌(conflict)
발생
- 서로 다른 브랜치에서 같은 줄을 수정했을 경우, 브랜치 병합 시
- 만일 파일을 여러 개 병합했다면 충돌이 발생한 파일 외에 다른 파일은 자동으로 병합됨
- 충돌이 생긴 문서는 자동으로 병합될 수 없음
- 사용자가 충돌 부분을 직접 해결한 후 커밋
- 사용자가 충돌 부분을 직접 해결한 후 커밋
- 병합 및 충돌 해결 프로그램
4-4. 병합이 끝난 브랜치 삭제하기
- 브랜치 병합 후 더 이상 사용하지 않는 브랜치는 삭제 가능
- 단, 완전히 지워지는 것은 아님
- 같은 이름의 브랜치를 만들면 예전 내용을 다시 볼 수 있음
- 브랜치 삭제의 경우
main
브랜치에서 진행해야 함 - 브랜치 삭제 명령어:
git branch -d 브랜치명
4-5. cherry-pick으로 병합하기
- 브랜치의 특정 버전의 변경 사항만 선택적으로 합치려고 할 때 활용
- 새로운 버전은 생성되지 않고
main
브랜치에서 합쳐짐
- 새로운 버전은 생성되지 않고
- 병합될 브랜치로 이동 후 병합
- 명령어:
git cherry-pick 체리픽 할 해시
- 명령어:
📚 Reference
Do it! 지옥에서 온 문서 관리자 깃&깃허브 입문(3장, p.90 ~ 135)