Lsiron
깃 브랜치와 병합 ! - git status, git branch, git merge(git rebase, git squash) 본문
깃 브랜치와 병합 ! - git status, git branch, git merge(git rebase, git squash)
Lsiron 2024. 6. 2. 03:21$ git Status
=> git Status 명령어를 통해 알 수 있다. (본인이 어떤 branch에 위치해 있는지도 알 수 있다.)
참고로 무엇을 커밋했는지 확인하려면
$ git log --oneline --all
=> git log --oneline --all 명령어를 통해 알 수 있다.
(요즘은 vscode의 git Graph 확장 프로그램을 통해 한눈에 알아볼 수 있다.)
Git branch => 개발중인 프로젝트의 복사본을 만들 수 있는 장점을 가지고 있음
$ git branch 작명
=> 예시로 작명이라는 git branch를 만들었다. 그러면 작명이라는 이름으로 프로젝트 사본을 만든 것이다.
$ git switch 작명
=> 사본 프로젝트 파일로 이동하려면 git switch를 통해 작명이라는 branch로 옮겨주면 된다.
$ git log --oneline --all graph
=> 그래프 식으로 무엇을 커밋했는지 확인 할 수 있는 명령어 이다.
작명 branch에서 개발한 파일이 너무 잘 되어서 기존 branch와 합치고 싶을 경우에는 merge를 사용하면 된다.
먼저 git switch를 통해 기준이 되는 branch로 이동을 해 주어야 한다. 이후 merge를 해주면 된다.
$ git merge 작명
=> git merge를 통해 기존 branch와 작명 branch를 합칠 수 있다.
그러나 각각 다른 파일을 수정하면 이상없이 합쳐지지만, 같은 파일의 같은 곳을 수정했을 경우에는 충돌이 생긴다.
충돌이 생겼을 경우엔, 1. 원하는 코드만 남기고 2. 다시 git add를 통해 스테이징에 올려준 뒤, 3. git commit을 하면 된다.
이렇게 일반적으로 작동되는 merge를 3-way merge 라고 한다.
하지만, 가끔은 새로운 branch에만 commit 이 있고 기준이 되는 branch에는 신규 commit 이 없는 경우가 있다.
이때 새로운 branch를 main 브랜치로 바꿔주는 merge를 fast-forward merge 라고 한다.
특별한 명령어를 사용할 필요 없이, 기존의 branch에서 신규 commit이 이뤄지지 않으면 자동으로 새로운 branch가 main이 되는것이 fast-forward merge 이다. 참고로 branch를 합쳐도 이전 branch는 남아있다.
혹시 merge가 완료된 branch를 삭제하고 싶다면,
$ git branch -d 브랜치명
=> 위 명령어를 통해 삭제하고 싶은 branch를 삭제 할 수 있다. 일반적으로 merge하고 나면 삭제를 해 준다.
하지만 merge를 하지 않은 브랜치 삭제의 경우는 다르다.
$ git branch -D 브랜치명
=> 위 명령어를 통해 merge를 하지 않은 branch를 삭제 할 수 있다.(소문자 d와 대문자 D의 차이)
추가로, merge 말고도 branch를 합칠 수 있는 방법이 있는데
바로 rebase & merge 다.
git rebase는 신규 branch의 시작점을 기존 branch의 최근 commit으로 옮겨주는 행위인데, 이 git rebase를 통해 commit의 시작점을 변경하여, fast-forward merge를 통해 합쳐주는 방법이 바로 rebase & merge 이다.
그림으로 설명하면 다음과 같다.

3-way-merge의 경우 나중에 현업에서 프로젝트를 진행 할 시, git history, git log를 출력할 때 상당히 복잡해지기 때문에 상대적으로 깔끔하게 출력되는 rebase를 사용한다.
허나, rebase & merge를 사용할 경우 충돌이 많이 발생한다.
그러면 rebase & merge 를 하는 방법에 대해 알아보자.
일반 merge와 반대의 과정이다. 먼저 git switch를 통해 새로운 branch로 이동해서 다음과 같이 명령어를 입력한다.
$ git rebase 기존브랜치명
=> 그러면 새로운 branch에 있는 내용을 기존 branch의 최근 commit으로 이동시킬 수 있다. 이후 git switch를 통해 기존 branch로 이동한 후, $ git merge 새로운브랜치명 을 입력해주면 rebase & merge 가 완료된다.
이것에 추가로 merge를 하는 방법이 한 가지 더 있다?!
바로 squash & merge 이다.
새로운브랜치에서 commit을 한 뒤, git switch를 통해 기존 branch로 이동을 하고나서 아래 명령어를 입력한다.
$ git merge --squash 새로운브랜치
=> 그러면 아래의 그림과 같이 결과가 나온다.

새로운 branch의 선이 기존 branch에 이어지는 것이 아닌, 순간이동 하는 것이다.
어떤 merge 방법을 쓰는것은 개인의 자유이지만 , 만약 회사에 들어가서 프로젝트 진행 시, 경우마다 어떤 merge 방법을 쓰는지 가이드라인이 있을 것이다.
참조: 코딩애플 https://codingapple.com/course-status/
'공부방 > Git' 카테고리의 다른 글
git lab에서 merge request 하는 방법. (0) | 2024.06.17 |
---|---|
타인과 협업하기 - git clone, git pull, pull request, git checkout (0) | 2024.06.09 |
코드 짜다가 실수를 한다면? - git restore, git revert, git reset (1) | 2024.06.09 |
잊을때마다 보는 Git 사용법(window) - 깃 원격저장소에 등록하기 (0) | 2024.05.31 |