branch
branch란
커밋을 하다 보면 새로운 기능을 추가해야 되는 경우가 있다.
근데 원본파일에 코드를 추가하고 커밋해도 되지만
혹시 새롭게 짠 코드가 원본파일을 손상시키면 어떻게 하지?
라는 걱정이 들때가 있다.
그럴 때 프로젝트의 복사본을 만들어서 거기에 먼저 개발하는 방법이 있다.
branch는 원본파일의 사본을 만들어 거기에다가 먼저 개발을 해보고 잘되면 합치는 기능이다.
branch를 만들어보자.
git branch 브랜치이름
만든 브랜치는 아래코드를 입력을 해서 들어가면 된다.
git switch 브랜치이름
브랜치를 만들었으면 저번과 동일하게 staging 하고 commit 하면 된다.
git add .
git commit -m "commit 메시지"
자신이 어떤 브랜치에 있는지 확인하려면 아래코드를 통해 확인할 수 있다.
git status
초기의 branch는 main branch 또는 master branch로 설정되어 있을 것이다.
새롭게 만든 branch에선 main branch에 전혀 영향이 없다.
자신이 만든 branch와 commit 내역을 한눈에 그래프를 보고 싶으면 아래코드 입력하면 된다.
git log --graph --oneline --all
여기서 head는 자신의 위치이다.
내 대가리라고 생각하면 된다.
merge 브랜치 합치기
새롭게 만든 브랜치와 main 브랜치를 합치고 싶으면 merge를 하면 된다.
- main/master 브랜치로 이동을 하고
- git merge 브랜치명을 입력하면 합쳐진다.
▲ merge 하고 나서 git log 이런 거 해보면 이쁘게 합쳐줬다고 알려준다.
합칠 때 주의사항이 있는데
master 브랜치와 새로 만든 브랜치가 같은 파일, 같은 줄을 수정했을 경우 merge confilct가 발생한다.
이 경우 에디터로 해당 파일을 열어보면 충돌사항이 적혀있다.
둘 중 어떤 코드를 적용할지 고르면 되는데 <<< / >>>> / ==== 이런 쓸데없는 것들은 다 지우고 원하는 코드만 남기면 된다.
어떤 코드를 남길지 결정했으면
git add 파일명
git commit -m '메시지'
입력하면 끝!!
branch 합치는 여러 가지 방법
브랜치를 합칠 때 여러가지 방법이 있다.
3-way merge
merge의 기본 동작방식이다.
브랜치에 각각 신규 commit이 1회 이상 있는 경우
merge 명령을 내리면 두 브랜치의 코드를 합쳐서 새로운 commit을 자동으로 생성해 준다.
fast-forward merge
새로운 브랜치에만 commit 이 있고
main 브랜치에는 신규 commit 이 없는 경우
이 경우에 merge 하게 되면 "fast-forward merge 되었습니다”라고 알려준다.
딱히 합칠 게 없으니깐.
새로운 브랜치에게 지금부터 니 이름은 main브랜치다!!라고 하는 것이다.
싫으면 아래 코드를 통해서 강제로 3-way merge 할 수도 있다.
git merge --no-ff 브랜치명
브랜치를 삭제하고 싶다면
3-way, fast-forward 아무렇게나 merge해도 브랜치가 자동으로 삭제되지 않는다.
// 병합 완료된 브랜치 삭제시 git branch -d 브랜치이름 // 병합하지 않는 브랜치 삭제시 git branch -D 브랜치이름
rebase and merge
rebase가 뭐냐면 브랜치의 시작점을 다른 commit으로 옮겨주는 방법이다.
그다음에 fast-forward merge 하는 것이다.
commit2에 있던 시작점을 commit3로 옮겨주고 fast-forward merge을 해주고 있다.
하는 방법
- 새로운 브랜치로 먼저 이동해서
- git rebase main 하면 된다.
- 그럼 브랜치가 main 브랜치 끝으로 이동하는데 그걸 fast-forward merge 하면 된다.
git switch 새로운브랜치
git rebase main
git switch main
git merge 새로운브랜치
장점
git log가 깔끔해짐
단점
브랜치 끼리 차이 많이 나면 충돌 많이 일어남
squash and merge
squash and merge가 뭐냐면
새 브랜치에 있던 코드변경사항들이 main 브랜치로 텔레포트시키는 것
이걸 왜 하냐면 git log를 깔끔하게 볼 수 있게 되기 때문이다.
요약
브랜치 생성은 git branch 브랜치명
브랜치 이동은 git switch 브랜치명
브랜치 합치기는 main/master 브랜치로 이동한 뒤에 git merge 브랜치명
브랜치마다 commit 내역을 그래프로 보고 싶으면 git log --graph --oneline --all
브랜치 합칠 때 conflict가 발생하면 파일 열어서 수정하고 git add, git commit 하기
- 3-way merge
브랜치에 각각 신규 commit 1회 이상 있을 때
두 개의 브랜치 합쳐줌 - fast-forward merge
새로운 브랜치에만 commit 있을 때
새로운 브랜치를 main브랜치로 함 - rebase and merge
새로운 브랜치의 시작점을 변경하고
fast-forward merge 해줌 - squash and merge
새로운 브랜치를 main 브랜치의 하나의 commit으로 함
레퍼런스
애플코딩
'개발 > github' 카테고리의 다른 글
git 커밋컨벤션 설정법 (0) | 2023.08.16 |
---|---|
git stash (0) | 2023.04.15 |
github 사용법 (0) | 2023.04.13 |
git 하는법 (0) | 2023.04.13 |
git 설치법 (맥북) (0) | 2023.04.13 |
댓글