Git branch 다루기
Git 브랜치 관리를 위한 명령어들: branch, switch, merge
The information manager from Hell. - Linus Benedict Torvalds
branch¶
브랜치를 관리하는 명령어로, 주요 옵션은 아래와 같다.
- 브랜치 생성
- 브랜치 이름 변경
- 브랜치 copy 생성
- 브랜치 삭제
Tip
참고로 원격 저장소의 브랜치를 삭제하려면 push 명령어를 사용해야 한다.
- 원격 저장소의 브랜치를 가져오기
Note
원격 저장소에 여러 브랜치가 있는 경우 pull이나 clone을 하면 main 브랜치가 다운로드 되고 다른 브랜치들을 받아오지는 않는다. 따라서 git remote update 명령어를 사용해서 원격 저장소의 브랜치에 접근할 수 있도록 해줘야 한다.
switch¶
위의 branch 명령어로 생성한 브랜치 간에 이동할 때, 즉 작업할 브랜치를 변경할 때 사용하는 명령어
- 브랜치 이동
- 브랜치 생성 및 이동.
<start-point>를 입력할 경우 해당 커밋을 브랜치의 시작점으로 지정
- 저장 상태를 변경하지 않고 단순히 과거 특정 커밋 상태인 코드를 보기 위한 이동
merge¶
현재 HEAD가 위치한 브랜치로 대상 브랜치를 합칠 때 사용하는 명령어
Tip
git merge의 기본값인 fast-forward 방식 머지는 머지 commit을 생성하지 않는다. 따라서 --no-ff 옵션을 사용해서 머지 commit이 생성되도록 해줘야 이력 관리가 용이하다.
Tip
--no-commit 옵션을 사용할 경우 머지 commit이 자동 생성되지 않기 때문에 사용자가 머지 결과를 미리 확인할 수 있다.
rebase¶
공통 base를 가진 브랜치에서 한 브랜치의 base를 다른 브랜치의 최신 커밋으로 브랜치의 base를 옮기는 명령어
Note
merge에 비해서 사용법이 복잡하고 중간에 걸친 모든 commit의 conflict를 검토해줘야 한다는 단점이 있지만, commit 이력이 더 깔끔해지고 히스토리 추적이 쉬워진다는 장점이 있다.
B 브랜치를 베이스로 한 C 브랜치가 있다고 할 때, C 브랜치의 시작점을 B 브랜치에서 main 등 다른 브랜치로 옮기려면 --onto 옵션을 사용하면 된다.
- 마지막의
<branch>입력을 생략할 경우 현재 브랜치에 대해 적용된다.
좀 더 자세한 설명
---
config:
theme: 'neutral'
---
gitGraph
commit id: "A"
commit id: "B"
branch feature/a
commit id: "C"
commit id: "D"
branch feature/b
commit id: "E"
commit id: "F"
commit id: "G"
checkout main
commit id: "H"
commit id: "I"
commit id: "J"
위와 같은 커밋 히스토리가 있을 때, feature/b 브랜치에서 작업한 커밋이 feature/a 브랜치의 커밋 내용과는 완전히 독립적이고, 따라서 main 브랜치에서 작업을 시작한 것으로 바꾸고 싶다면 아래와 같이 명령하면 된다.
---
config:
theme: 'neutral'
---
gitGraph
commit id: "A"
commit id: "B"
branch feature/a
commit id: "C"
commit id: "D"
checkout main
commit id: "H"
commit id: "I"
commit id: "J"
branch feature/b
commit id: "E"
commit id: "F"
commit id: "G"
checkout main