티스토리 뷰
Branch란?
개발할 때 git 사용 시 기존의 코드에 영향을 받지 않고 따로 개발이나 테스트를 할 수 있는 작업공간
//생성
git branch 생성할브랜치명
//모든 Branch 보기
git branch
//삭제
git branch -D 삭제할브랜치명(병합안햇어도 강제삭제)
git branch -d 삭제할브랜치명(병합된 브랜치만 삭제가능)
//변경
git branch -m 기존브랜치명 변경할브랜치명
//현재 브랜치 변경//
git switch 바꿀브랜치명
이전까지는 main브랜치라는 하나의 작업공간에서만 git을 이용했었다.
git branch A명령으로 브랜치를 생성하고 switch해주면 main과는 분리된 하나의 작업공간 A브랜치로 작업할 수 있게된다.
(A브랜치는 main브랜치의 모든 커밋을 이어받는 복사본을 가지게 된다.)
다른 Branch와 합치기 전까지 서로에게 어떤 영향도 주지 않는다.
기본 사용법
git merge 현재브랜치에 합칠 타 브랜치명
git rebase 현재브랜치를 추가할 타 브랜치명
1. merge
위 이미지는
- Person파일의 내용 중 Kevin을 MJ로 변경한 A브랜치의 커밋
- 분기를 나타내기 위해 main브랜치에 Person파일 내용에 Mary Jane추가
하고 있다.
이 상황에서 merge를 사용하는 방법은 merge는 타 분기(브랜치)를 가져와서 내 브랜치에 합쳐서 변경을 생성하는 것이기 때문에 아래와 같이 main브렌치로 이동 후 진행한다.
//먼저 메인브랜치로 이동
git branch main
//그 다음 A브랜치를 가져와 현재 main브랜치와 합침
git merge A
합칠 때 아래와 같이 충돌이 일어나는데 main브렌치에서 Person파일의 내용을 변경 했고, A브렌치에서도 Person파일에 내용을 변경하려고 했기 때문이다.
오른쪽 상단에 Resolve conflicts를 클릭하면 직접 수정할 수 있다.
들어가보면 왼쪽에 main브렌치의 변경사항이 있고, 오른쪽에 A브렌치의 변경사항이 있다. 가운데로 >> 이나 <<를 눌러서 적용해 주면 된다.
적용해주고 Soucetree에서 보면 커밋되지 않는 변경사항이 생긴다. 이것이 merge된 결과가 스테이지에 올라간 것이다.
여기서 아래와 같이 commit을 해주면 된다.
git commit -m "main브렌치에 A브렌치 병합"
그리고 병합완료된 A브렌치는 지워주면 된다.(안지워도 되지만 수많은 브렌치가 존재한다고 하면 그래프의 복잡도가 심해진다.)
git branch -d A
2. rebase
B브렌치를 특정 commit에서 생성하고, games파일에 Sim City추가 후 add commit, 다시 games 파일에 King Of Fighters를 추가 후 add commit 한 상황이다.
merge가 main으로 타브렌치를 하나의 스테이지로 합치는 거라면 rebase는 B브렌치의 각각의 commit이 main브렌치에 추가되는 것이다.
merge는 main브렌치에서 하는것이라면, rebase는 main브렌치에 추가될 브렌치에서 main으로 명령한다.
//B브렌치로 이동 후
git switch B
//main브렌치 분기에 B브렌치 커밋 추가
git rebase main
그러나 서로 분기마다 main도 games파일을 수정했고, B도 games파일을 수정 했기 때문에 충돌이 나서 rebase중에 아래와 같은 화면이 나타난다.
보면
1. git rebase전 상태로 돌아가려면 git rebase --abort
2. 충돌난 commit을 스킵할 때 git rebase --skip (건너뛰는 것 이기 때문에 rebase하는 내용이 중요한 것이라면 하면 안됨.)
3. 충돌파일을 git add 하고, 바로 다음 명령으로 git rebase --continue하라고 안내한다.
//변경되는 모든 대상을 add한다
git add .
git rebase --continue
명령을 하면 파일내용이 뜨는데 :wq로 저장하고 나간다.
그럼 아래와 같이 main브렌치의 분기에 B브렌치의 커밋내역이 추가 된 형태가 된다.
이 상황에서 main브렌치가 B브렌치 이전시점에 위치하게 되는데
main이 B브렌치에 위치하기 위해서 merge해주면 된다.
git switch main
git merge B
//rebase완료 했으니 B브렌치 삭제
git branch -d B
최종적으로 아래와 같이 main브렌치 하나만 남고 rebase작업이 끝난다.
'Git' 카테고리의 다른 글
[Stage에 올리기, Commit하기] [reset, revert로 이전 버전으로] (0) | 2025.04.12 |
---|---|
인텔리제이 + Git Bash + Source Tree 이용한 git 윈도우 로컬 환경 조성 (0) | 2025.04.11 |