branch
를 이용하여 프로젝트 변경사항 관리
branch
는 분기된 가지(다른 차원)를 뜻하며 프로젝트를 하나 이상의 모습으로 관리해야 할 때 사용된다.
branch
는 크게 2가지의 용도로 사용된다.
여러 작업들이 각각 독립되어 진행될 때 사용 (실배포용
, 테스트서버용
, 새로운 시도용
)
각각의 차원에서 작업한 뒤 확정된 것을 메인 차원에 통합할 때 사용 (신기능 1
, 신기능 2
, 코드개선
, 긴급수정
...등등)
branch
는 이 모든 것을 하나의 프로젝트 폴더에서 진행이 가능하게 한다.
add-coach
란 이름의 브랜치 생성git branch add-coach
branch
목록 확인git branch
add-coach
branch
로 이동git switch add-coach
new-teams
branch
생성과 동시에 이동git switch -c new-teams
to-delete
branch
추가한 뒤 to-erase
로 branch
이름 변경git branch -m (기존 브랜치명) (새 브랜치명)
to-erase
branch
를 삭제git branch -d (삭제할 브랜치명)
서로 다른 브랜치를 합치는 방식에는 크게 2가지가 있다.
merge
: 두 branch
를 한 커밋에 이어붙이므로 branch
사용내역을 남길 필요가 있을 때 적합한 방식
rebase
: branch
를 다른 branch
에 이어붙이므로 한 줄로 깔끔히 정리된 내역을 유지하기 원할 때 적합 (이미 팀원과 공유된 커밋들에 대해서는 사용하지 않는 것이 좋다.)
현재 branch
상황을 소스트리(GUI)
로 확인해보면 다음과 같다.
add-coach
브랜치를 main
브랜치로 merge
하면 결과는 다음과 같다.
단 이 때 main
브랜치로 이동한 뒤에 작업을 수행해야 한다.
git merge add-coach
위 코드의 결과를 소스트리(GUI)
로 확인해보면 다음과 같다.
merge
는 branch
사용내역을 남기기 때문에 병합된 브랜치는 삭제한다.
git branch -d add-coach
또한 merge
도 하나의 커밋이기 때문에 reset
을 사용하면 merge
하기 전 해당 브랜치의 마지막 시점으로 되돌아갈 수 있다.
rebase
는 merge
와는 반대로 이동시킬 대상의 브랜치로 이동한뒤 작업을 수행한다.
new-teams
브랜치로 이동git switch new-teams
new-teams
브랜치, main
브랜치 병합git rebase main
위 코드의 결과를 소스트리(GUI)
로 확인해보면 다음과 같다.
소스트리에서 상태 확인해보면 main
브랜치가 뒤쳐져 있는 것을 확인할 수 있다.
그래서 main
브랜치로 이동 후 아래 명령어로 new-teams
의 시점으로 fast-forward
하는 추가 작업이 필요하다.
git merge new-teams
같은 위치 파일에 대해 각각의 브랜치들이 다른 내용을 입력하면 브랜치 간 충돌
이 발생한다.
main
브랜치와 변경항목이 겹치는 conflict-1
, conflict-2
브랜치를 생성한 뒤 소스트리(GUI)
로 확인해보면 다음과 같다.
여기서 main
브랜치로 이동하여 conflict-1
브랜치와 merge
를 하면 다음과 같은 오류가 발생한다.
위의 결과는 VS Code
의 기능으로 현재 브랜치(main
)와 merge
할 브랜치(conflict-1
)의 공통 변경값이 충돌하여 발생했다.
만약 충돌한 에러의 해결이 당장 가능하다면 충돌 부분을 수정하여 git add .
, git commit
으로 병합한다.
하지만 충돌한 에러의 해결이 당장 어려울 경우에는 다음과 같이 merge
를 중단한다.
git merge --abort
merge
충돌을 해결한 뒤 소스트리(GUI)
로 확인해보면 다음과 같다.
위 결과 main
브랜치와 conflict-2
브랜치의 2개의 작업은 충돌을 발생시킨다
conflict-2
로 이동한 뒤 main
과 rebase
를 하면 결과는 다음과 같다.
git status
를 통해 오류 메시지를 확인할 수 있다.
이처럼 rebase
충돌은 merge
충돌과 다르게 브랜치안의 모든 커밋마다 충돌이 발생하므로 차례대로 해결해야한다.
이 때 만약 충돌 해결이 당장 가능하다면 충돌 부분을 수정하여 git add .
, git rebase --continue
로 단계적으로 해결한다.
git add .
git rebase --continue
하지만 충돌한 에러의 해결이 당장 어려울 경우에는 다음과 같이 rebase를 중단한다.
git rebase --abort