1. Branch란?

독립적인 어떤 작업을 진행하기 위해 공간을 만드는 것입니다. 새로 만든 브랜치는 파생해서 만든 브랜치와 동일한 상태를 가집니다. 하지만 브랜치에서 수정하여 커밋한다면, 기존의 브랜치에는 영향을 미치지 않습니다. 

 

예를 들어서 dev 브랜치가 있습니다. 로그인 기능을 만들기 위해서 feature/login 브랜치를 생성해 작업을 완료한 후 commit을 했다면, 아직까진 dev에는 영향이 없습니다. 하지만 merge 작업을 수행한다면 feautre/login에 commit 사항이 dev 브랜치로 넘어오게 됩니다. 이처럼 한 개의 브랜치를 여러 갈래로 나누어서 병렬적으로 작업을 수행하고, 합칠 수 있는 기반을 제공합니다. 

 

1-1. branch 생성

 

첫 번째 명령어를 통해서 feature/login 브랜치를 만들 수 있습니다. 해당 브랜치는 명령어를 입력한 시점의 브랜치에서 갈래가 나눠집니다. 두 번째 명령어를 통해서 branch 목록을 확인할 수 있습니다. 

 

git branch feature/login // feature/login 브랜치 생성
git branch // 브랜치 목록 확인

 

 

1-2. branch 이동

 

이제 브랜치를 만들었다면, 아래의 명령어를 이용해서 브랜치를 이동할 수 있습니다. 

(checkout을 통해서 이동할 수도 있지만, 해당 명령어는 HEAD를 이동시키는 명령어로만 사용하여 역할을 분리하는 게 좋습니다.)

 

git switch feature/login

 

1-3. 생성과 이동 동시에

 

1-1,1-2의 과정을 아래의 명령어로 동시에 진행할 수 있습니다. 

 

git switch -c feature/login

 

1-4. 브랜치 삭제

 

작업을 완료해 병합했거나, 더이상 필요 없는 브랜치를 삭제할 때 사용합니다.

 

git branch -d feature/login

 

1-5. 로컬 -> 원격 브랜치 생성 및 연결

 

로컬에 있는 브랜치에서 원격 저장소의 존재하지 않는 브랜치로 push 할 때 브랜치를 사용하는 명령어입니다. 

브랜치 생성이 된 것을 확인하고 싶다면, git branch --all 하면 원격까지 확인할 수 있습니다. 

git push -u <원격저장소 이름> <branch이름>

 

1-6. 원격 브랜치 -> 로컬 브랜치로 생성

 

로컬에는 존재하지 않고, 원격에만 존재할 경우 아래의 명령어를 통해서 원격 브랜치를 가져오고, switch까지 진행합니다. 

 

git switch -t <원격저장소 이름>/<가져올 브랜치이름>

 

1-7. 원격 브랜치 삭제

 

원격 브랜치는 아래의 명령어로 간단하게 삭제 가능합니다.

 

git push <원격 저장소 이름> --delete <원격 브랜치 이름>

 

1-8. 원격 브랜치 pull

 

원격 브랜치에 있는 사항을 git pull을 통해서 가져올 수 있습니다. 이때 충돌이 난다면, 아래의 적은 병합 충돌과 같이 해결할 수 있습니다. 2-3 참고해주세요.

 

 

2. 병합 

2가지 방법을 통해서 branch를 병합할 수 있습니다. 한 가지씩 알아보겠습니다. 

 

2-1. merge

 

merge는 하나의 커밋입니다. 따라서 갈라진 브랜치와 기존의 브랜치를 이어주는 하나의 커밋을 통해서 병합해주는 역할을 합니다. 기준이 되는 브랜치로 이동하고, 아래의 명령어를 통해서 병합을 진행합니다.

merge의 장점은 새로운 커밋을 통해서 진행하므로 merge하기 전의 상태로 돌아갈 수 있습니다. 

 

git merge feature/login

 

예시를 보겠습니다. 

 

merge 전

 a -> b           

    🌂 c -> d

 

merge 후

 a -> b ---------> d'

    🌂 c -> d🛹

 

2-2. rebase

 

merge가 새로운 커밋을 통해서 병합하는 과정이었다면, rebase는 브랜치를 떼다가 기존의 브랜치에 이어 붙이는 방식입니다. 아래의 명령어를 통해서 병합을 진행하는데 rebase는 기존 브랜치가 아닌 파생된 브랜치에서 명령어를 실행해줘야 합니다. 

 

git rebase feature/login // 브랜치 합치기
git switch main // 메인으로 가기
git merger feature/login // head 옮기기


rebase전 

 a -> b           

    🌂 c -> d 

 

rebase 후

a -> b -> c -> d 

 

merge와 다른 모습을 볼 수 있습니다. 

 

2-3. 충돌 해결

 

병합하려는 브랜치 두 개가 같은 부분을 변경 했다면, 충돌이 발생합니다. 해당 부분들을 수정해야 병합이 가능합니다.

 

merge의 경우 충돌이 난 부분을 수정한 후 git add -> git commit 과정을 수행해주시면 됩니다. 

이때 충돌난 부분이 광범위해 merge를 중단하기 원한다면 아래의 명령어를 통해서 중단할 수 있습니다.

 

git merge --abort

 

rebase의 경우도 비슷하게 흘러갑니다. 다른 부분이 있다면, 여러 개의 commit이 충돌 날 수 있기 때문에 하나의 충돌을 해결했다면 git add를 해주고, 계속해서 남은 commit에 대해서 rebase를 진행하기 위해선 아래의 명령어를 입력해야 합니다. 입력했다면, commit 메시지를 적어주면 됩니다. 

 

git rebase --continue

 

3. Commit 수정

이전에는 바로 전 단계의 commit만 수정했다면 이번에는 오래전의 commit도 수정할 수 있는 방법에 대해서 알아보겠습니다. git rebase -i를 사용합니다. 

 

그럼 수정할 수 있도록 commit의 내용들이나오고 

pick ~~

pick ~~로 작성된 부분을 변경해줍니다. 

 

아래의 명령어를 ~~ 앞에 붙이고 다음으로 진행하면 commit에 대한 수정이 가능합니다.

 

p, pick 커밋 그대로 두기
r, reword 커밋 메시지 변경
e, edit 수정을 위해 정지
d, drop 커밋 삭제
s, squash 이전 커밋에 합치기

 

지금까지 branch, 병합, commit 수정에 대해서 알아봤습니다. 감사합니다. 

'Git' 카테고리의 다른 글

Git add, commit, reset, revert, .ginignore  (0) 2022.06.03