독립적으로 특정 작업을 진행할 때 사용한다.
팀으로 여러작업 동시에 작업 가능
여러 Branch를 합치는 방법 — Merge
merge 방법에 따른 차이
- merge — branch의 모든 기록 보존, merge에 대한 기록 추가.
- 이 방법을 사용하면 merge에 대한 commit이 하나 생성되고 어느 시점에 merge를 진행했는지 쉽게 알 수 있다.
- branch가 늘어나고 여러 번의 merge가 생기게 되면, 그래프가 복잡해져 **커밋 히스토리(Commit History)**를 파악하기 더욱 어려워질 수 있다.
- squash and merge — 여러 commit 기록 하나로 합치기, merge기록 남기지 않기.
지저분한 커밋 이력들을 삭제하면서 master branch로 합칠 때 사용한다.
-
merge할 때 여러 commit들을 하나로 합친다.
Squash를 하게 되면 모든 커밋 이력이 하나의 커밋으로 합쳐지며 사라진다.
-
merge에 대한 이력은 남기지 않는다.
-
- rebase and merge — 여러 commit 기록 남기기, merge 기록 남기지 않기.
기존의 커밋 이력을 유지하면서도, 깔끔하게 하나의 흐름으로 관리하고자 할 때 사용한다.
-
일반적으로 가장 많이 사용된다.
-
merge에 대한 이력이 남지 않는다.
즉, 언제 merge가 됐는지 알 수 없다.
만약 merge 시점에 대한 기록이 필요하다면 커밋으로 직접 명시해주면 된다.
-
모든 커밋이력들이 rebase 되어서 추가된다. 즉, fast-forward 된다.
Rebase를 하면 커밋들의 Base가 변경되므로 Commit Hash 또한 변경 될 수 있다.
이로 인해 Force Push가 필요한 경우가 발생한다.
-
-
e.g., 내가 branch를 분기한 이후, 기존의 branch에 수정이 발생한 상황. 어떻게 해야 할까?
- merge할 때 rebase and merge하기. ← 더 나은 방법.
- 내 branch에 기존 branch를 pull해서 conflict 해결하기.
- 내가 작성한 커밋을 절대 변경하고 싶지 않은 경우
- 내가 작성한 커밋 기록은 유지한채, Merge라는 기능을 통해 합쳐졌다라는 기록을 같이 남기게 된다.
-
Conflict
마지막으로 push 하는 사람이 해결해야 한다.
-
마지막에 push하는 사람은 conflict 에러가 발생한다
-
git status로 충돌 위치 확인
-
A와 B가 협의 후 수정
CVN의 해결방법과 유사
-
원격 브랜치 가져오기
-
**git remote update
원격 저장소 갱신**가끔 갱신을 하지 않으면 push하고자 하는 원격 branch를 찾을 수 없다는 오류를 보게된다.
해당 오류를 처음 만나면 분명 branch있는데 왜 없어! 하게 된다.
-
**git branch -r
원격 저장소 branch 리스트 확인** -
**git branch -d dev
로컬 저장소 branch 제거하기** -
**git checkout -t origin/dev
원격 저장소 branch 가져오기**-t
: 원격 저장소의 branch 이름과 동일한 로컬 branch를 생성-f
: 문제가 발생하더라도 강제로 진행한다.
branch 합치기, 병합하기
-
**git checkout -b issue1
branch 생성하고 변경하기**- 위 명령어는 아래의 두 가지 명령어를 한 번에 수행한 것이다.
git branch issue1 main
main branch로부터 issue1 branch 생성하기git checkout issue1
main branch에서 issue1 branch로 변경하기
— 코드 추가 작업 수행 —
- 위 명령어는 아래의 두 가지 명령어를 한 번에 수행한 것이다.
-
**git checkout master
(작업이 완료되고 난 후)master
브랜치로 이동하기** -
**git merge issue1
issue1을 master에 merge (병합)하기**
실수로 삭제한 branch 되돌리기
실수로 커밋을 추가한 후, branch를 삭제해서 작업물이 사라졌다면??
멘붕에 빠지지 말자. 복구 방법이 있다!
-
git reflog
: branch 사용 이력 출력하기 -
복구하고자 하는 branch의
HEAD@{번호}
기억하기 -
git checkout -b '<branch name>' HEAD@{번호}
해당 명령어를 통해 삭제해버린 branch를 복구할 수 있다.
Branch 전략 — Flows
가장 최신 커밋이 어디에 존재하느냐에 따라 두 가지 방법으로 나뉜다.
- Local 중심 — Git Flow
- Remote 중심 — Github Flow