[Do it! 5일 만에 끝내는 깃&깃허브 입문] 3장. 깃과 브랜치
[Do it! 5일 만에 끝내는 깃&깃허브 입문] 3장. 깃과 브랜치
“Do it! 5일 만에 끝내는 깃&깃허브 입문” 도서 바로가기
3장. 깃과 브랜치
3-1. 브랜치 알아보기
- 브랜치(branch): 메인 줄기에서 뻗어 나온 ‘가지’처럼, 기존 코드의 상태를 보존하면서 새로운 작업을 안전하게 분리하여 진행하는 기술
브랜치가 필요한 이유
- 메인 코드의 안정성을 지키면서 여러 기능을 동시에 개발하고 안전하게 합치기 위해 브랜치를 사용
브랜치 기능 살펴보기
- 분기(branch): main 브랜치에서 새 브랜치를 만드는 것을 분기한다(branch)라고 함
- 병합(merge): 분기했던 브랜치를 main 브랜치에 합치는 것을 병합한다(merge)고 함
3-2. 브랜치 만들기 및 이동하기
새 브랜치 만들기
git branch: 깃에서 브랜치를 만들거나 확인하는 명령--online: 한 줄에 한 커밋씩 보여줌- 커밋을 한 줄로 표시할 경우 커밋 해시가 7자리만 보임 → 커밋 해시는 너무 길어서 앞의 7자리로 커밋을 구별 가능함
브랜치 전환하기 - git switch
git switch: 현재 브랜치에서 다른 브랜치로 이동하는 것 → ‘브랜치를 전환한다’
3-3. 브랜치에서 커밋하기
브랜치와 커밋의 관계 알아보기
--branches: 현재 작업 중인 브랜치에 국한되지 않고, 내 컴퓨터에 존재하는 모든 브랜치의 발자취(커밋)를 모아서 확인할 때 사용하는 옵션--graph: 커밋의 분기와 병합 과정을 시각적인 그래프(가지 모양)로 출력하는 옵션
브랜치 간의 차이점 살펴보기
git log 브랜치A..브랜치B: 브랜치A에는 없고 브랜치B에만 있는 커밋들을 보여달라는 의미
3-4. 브랜치 병합하기
서로 다른 파일 병합하기
- 기준 브랜치로 이동: 최종적으로 결과물을 합칠 브랜치(보통
main)로 이동.git switch main
- 병합 실행: 가져올 브랜치의 이름을 지정.
git merge [작업브랜치명]
서로 다른 브랜치에서 한 문서의 다른 부분을 수정했을 때 병합하기
- 병합 방법 및 동작 원리
- 기준 브랜치 이동: 합치고자 하는 목표 브랜치(보통
main)로 이동.git switch main
- 병합 실행: 수정 내역이 있는 브랜치를 불러옴.
git merge [작업브랜치명]
- 기준 브랜치 이동: 합치고자 하는 목표 브랜치(보통
결과: 자동 병합 (Auto-merging)
(Git은 똑똑하게 문서 전체를 대조하여 수정된 위치를 파악함)
- 동작: 위쪽을 고친 A 브랜치 내용과 아래쪽을 고친 B 브랜치 내용을 자동으로 합쳐 하나의 완성된 문서를 만듦
- 충돌 여부: 수정 위치가 겹치지 않으므로 충돌(Conflict)이 발생하지 않으며, 자동으로 커밋까지 완료됨
서로 다른 브랜치에서 한 문서의 같은 부분을 수정했을 때 병합하기
- 병합 시도:
git merge [브랜치명]입력 시 “CONFLICT” 메시지가 뜨며 병합이 일시 중단됨. ⇒ 충돌 발생 - 파일 수정: 충돌이 발생한 파일을 열면 아래와 같은 표식이 나타남.
<<<<<<< HEAD: 현재 브랜치의 내용=======: 구분선>>>>>>> [브랜치명]: 합치려는 브랜치의 내용
- 내용 선택: 둘 중 하나를 선택하거나 내용을 직접 수정한 뒤, 위 특수 기호들을 모두 삭제.
- 병합 완료: 수정된 파일을 저장하고 아래 명령어를 순서대로 입력.
git add [파일명]git commit(자동으로 병합 커밋 메시지가 생성됨.)
병합이 끝난 브랜치 삭제하기
- 로컬 브랜치 삭제:
git branch -d [브랜치명]-d: 병합 확인 후 삭제하는 ‘안전모드’-D: 병합 여부 무관하게 지우는 ‘강제삭제’
- 원격 브랜치 삭제:
git push [원격명] --delete [브랜치명]
cherry-pick으로 병합하기
- 커밋 해시 확인: 가져오고 싶은 커밋이 있는 브랜치로 가서
git log를 통해 커밋의 해시값(예:abc1234)을 복사합니다. - 대상 브랜치 이동: 커밋을 붙여넣을 브랜치(예:
main)로 이동합니다.git switch main
- 체리픽 실행:
git cherry-pick [커밋해시]touch: 비어 있는 파일을 즉시 생성하거나, 기존 파일의 수정 시간을 현재로 업데이트하는 명령어.
This post is licensed under CC BY 4.0 by the author.