본문 바로가기

문과 코린이의, [Git] 기록

[문과 코린이의 IT 기록장] Git Branch 다루기 (Branch란?, Branch 생성 / 이동 / 삭제하기, 서로 다른 브랜치를 합치는 두 방식, 브랜치 간 충돌 해결하기, SourceTree로 진행해보기)

반응형

[문과 코린이의 IT 기록장] Git Branch 다루기 (Branch란?, Branch 생성 / 이동 / 삭제하기, 서로 다른 브랜치를 합치는 두 방식, 브랜치 간 충돌 해결하기, SourceTree로 진행해보기)

[문과 코린이의 IT 기록장] Git Branch 다루기 (Branch란?, Branch 생성 / 이동 / 삭제하기, 서로 다른 브랜치를 합치는 두 방식, 브랜치 간 충돌 해결하기, SourceTree로 진행해보기)

 


[ 참고 영상 ]

 

제대로 파는 Git & GitHub - by 얄코 - 인프런 | 강의

코알못도 따라올 수 있는 친절하고 쉬운 강좌! 현업 개발자는 Git 박사로 들어주는 끝판왕 강좌!, - 강의 소개 | 인프런...

www.inflearn.com

2022.03.29 - [문과 코린이의, [Git] 기록] - [문과 코린이의 IT 기록장] Git Intro (Git을 배워야하는 이유, Git 설치 (윈도우), SourceTree, VS Code 설치, CLI vs GUI 무엇을 사용해야 하는가?, Git 최초설정, Git을 통한, 프로젝트 생성 & Git 관리 시작, Sou..

 

[문과 코린이의 IT 기록장] Git Intro (Git을 배워야하는 이유, Git 설치 (윈도우), SourceTree, VS Code 설치

[문과 코린이의 IT 기록장] Git Intro (Git을 배워야하는 이유,  Git 설치 (윈도우), SourceTree, VS Code 설치, CLI vs GUI 무엇을 사용해야 하는가?, Git 최초설정, Git을 통한, 프..

vansoft1215.tistory.com

2022.03.30 - [문과 코린이의, [Git] 기록] - [문과 코린이의 IT 기록장] Git 시간 다루기 (프로젝트의 변경사항들을 버전에 담기, commit하기, 변경사항들을 만들고 Commit하기, Git에서 과거 버전으로 돌아가는 방식, SourceTree로 진행해보기)

 

[문과 코린이의 IT 기록장] Git 시간 다루기 (프로젝트의 변경사항들을 버전에 담기, commit하기, 변

[문과 코린이의 IT 기록장] Git 시간 다루기 (프로젝트의 변경사항들을 버전에 담기,  commit하기, 변경사항들을 만들고 Commit하기, Git에서 과거 버전으로 돌아가는 방식, SourceTree로 .

vansoft1215.tistory.com


1. Branch란?

- 한 프로젝트가 여러 모습으로 관리되어야 할 때 ex. 실배포용 / 테스트 서버용 / 새로운 시도용

- 여러 작업들이 각각 독립되어 진행될 때 (역할을 분담해서 사람들이 프로그래밍을 해갈 때)

 ex. 신기능 1. 신기능, 2. 코드개선 및 긴급수정... (각각의 차원에서 작업한 뒤 확정된 것을 메인 차원에 통합)


2. Branch 생성 / 이동 / 삭제하기

1) Brnach 생성

$git branch add-coach
# add-coach란 이름의 브랜치 생성

2) 브랜치 목록 확인

$git branch

*이 붙어있는 것은 현재 branch라는 것

3) 해당 브랜치로 이동

$git switch add-coach

4) 브랜치 생성과 동시에 이동하기

$git switch -c 브랜치명

5) 브랜치 삭제하기

$git branch -d 삭제할 브랜치명

* 지워질 브랜치에만 있는 내용의 커밋이 있는 경우(즉, 다른 브랜치로 가져오지 않은 내용이 있는, 브랜치를 지울 때)는 , -d 대신 -D(대문자)로 강제 삭제 해야 한다.

$git branch -D 강제삭제할 브랜치명

6) 브랜치 이름 바꾸기

$git branch -m 기존 브랜치명 새 브랜치명

[ git으로 여러 브랜치의 내역 확인 ]

$git log --all --decorate --oneline --graph

[ 소스트리로 여러 브랜치의 내역 확인 ]

* 각각 main / add-coach / new-teams 브랜치로 이동해 커밋 후 만든 결과 (각각의 내용들이 서로 달라짐)


3. 서로 다른 브랜치를 합치는 두 방식

1) merge

- 두 개의 가지(브랜치)한 커밋에 이어붙이는 것이다. 

- 이 과정에서 커밋은 새로 생겨나는 것이며, 즉 새로 생기는 커밋에는 원래 브랜치랑 병합될 브랜치의 변화들이 모두 담기게 된다.

- 이는 브랜치 사용내역(history)을 남길 필요가 있을 때 적합한 방식이다.

 

[ 사용 방법 ]

a. 합쳐져서 사용될 주 대상의 브랜치로 이동

b. 아래의 명령어 입력

$git merge 병합할 브랜치명

 

[ merge는 reset으로 되돌릴 수 있다. ]

- merge도 하나의 커밋이다. 따라서 reset으로 merge하기 전 브랜치의 마지막 시점으로 이동 가능하다.

이 커밋까지 현재 브랜치를 초기화 진행

- main에서 merge하기 바로 전 상태로 reset을 진행하면 됨.

 

[ 병합된 브랜치 삭제 방법 ]

$git branch -d 삭제할 브랜치명

add-coach가 사라진 것을 확인할 수 있음

 


2) rebase

- 브랜치의 마디(커밋)들을, 다른 대상 브랜치에 이어붙이는 것이다.

- 이는 한 줄로 깔끔히 정리된 내역을 유지하기 원할 때 적합한 방식이다. 즉 브랜치 사용 내역(history)을 깔끔하게 정리하는 역할을 한다.

- 그러나 이미 팀원과 공유된 커밋들에 대해서는 rebase를 사용하지 않는 것이 좋다.

 

[ 사용 방법 ]

- 붙여넣을 내용이 들어있는 브랜치로 이동

$git switch 이동할 브랜치명

- main으로 붙여넣기

$git rebase main

- main 브랜치로 이동 후, main을 내용이 들어있는 브랜치가 반영되도록 이동시키기

$git switch main

main이 new-teams를 적용하지 못하고 있음 (하단에 존재)

$git merge 이동된 브랜치명

main이 new-teams를 적용함

- 이동된 브랜치 삭제하기

$git branch -d 이동된 브랜치명


4. 브랜치 간 충돌 해결하기

- 서로 다른 브랜치더라도, 서로 다른 부분을 각 브랜치들이 수정하게 되면, merge / rebase시 문제가 발생하지 않는다.

- 그러나, 만약 서로 다른 브랜치에서, 같은 파일의 같은 부분에 대해, 서로 다르게 수정하게 된다면 병합할 때, 둘 중 어떤 것을 선택해야 하는지에 대한 충돌 문제가 생겨나게 될 것이다.

- 그러면 컴퓨터는 프로그래머에게 어떤 것을 선택할지에 대한 창을 띄우게 되며, 프로그래머는 이를 해결해줄 필요가 있다.


1) merge 충돌 해결하기

$git merge 해당 브랜치
# 충돌이 발생하면, 해당 내역 중 어떤 것을 선택해야하는지와 관련해 오류가 뜸

초록색 : 현재 브랜치, 파랑색 : merge하는 브랜치

 * Accept Current Change : 현재 브랜치 내용 선택

 * Accept Incoming Change : 해당 브랜치 내용 선택

 * Accept Both Changes : 둘 다 선택

 

만약 충돌한 부분이 너무 많아, 당장 모두 선택하지 못할 때, 즉 merge를 중단해야 할 경우엔 아래의 명령어를 사용한다.

$git merge --abort

충돌 부분을 해결 뒤, git add . , git commit으로 병합을 완료해야 한다.

$git add .
$git commit
# 이후 나오는 것은 :wq로 저장하면 완료됨

2) rebase 충돌 해결하기

rebase는 하나하나 모든 커밋마다 충돌 과정을 따로 분리해 해결해 줘야 한다. (merge는 한번에 가능)

$git switch 해당 브랜치
# 해당 브랜치로 이동
$git rebase main
$git status
# 오류 충돌 부분을 보여줌. 선택하도록 유도

충돌한 부분이 너무 많아, 당장 모두 선택하지 못할 때, 즉 rebase를 중단해야 할 경우엔 아래의 명령어를 사용한다.

$git rebase --abort

충돌 부분을 해결 뒤, git add . , git commit으로 병합을 완료해야 한다.

$git add .
$git rebase --continue

이후 main을 제대로 병합시켜주기 위해, git switch, git merge를 진행해야 최종적으로 완료된다.

$git switch main
$git merge 해당 브랜치

다 사용된 브랜치는 바로 삭제해줘야 한다.

$git branch -d 해당 브랜치

 

 


5. SourceTree로 진행해보기

1) 브랜치 생성

 * sourcetree에서 브랜치를 옮겨다닐 때마다, VS Code에서 내용이 해당 브랜치에 맞게 변화하는 것을 확인할 수 있음.

 

2) merge 진행

sourcetree로 merge하는 방법

 * main에서 해당 브랜치를 우클릭해 marge(현재 브랜치로 to-merge 병합) 진행

 

3) rebase 진행

sourcetree로 rebase하는 방법

 * 해당 브랜치로 이동 후, main을 우클릭해 rebase(현재 변경사항을 main에 재배치) 진행

 * 이후, main으로 이동해, 해당 브랜치를 우클릭해 병합을 눌러주면 rebase 완료

 * 완료가 되었다면, 마무리로 오른쪽 클릭해 더 이상 필요 없는 해당 브랜치들 삭제하기

 cf) conflict 발생 시, sourcetree로 merge는 진행하기 편리하지만, rebase는 진행하기 어려움


* 유의사항
- 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다.
- 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다.
- 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :)
반응형