티스토리 뷰

Git

#4 branch, merge, conflict

RadderNepa 2022. 11. 3. 00:49

● 도입

출처 - 코딩애플 매우쉽게 알려주는 git & github

- 코딩을 하다보면 당연히 새로운 기능이 추가된다.
- 이때 이 기능(코드)을 원본 파일에 추가하고 커밋해도 되지만 만약 이 과정에서 지금까지 작동하던 프로그램이 망가지면 큰일이다.
- 이러한 걱정 없이 안전하게 새로운 기능을 추가하고 싶으면 '프로젝트의 복사본을 만든 후' 거기에 먼저 개발을 해보는 것도 좋은 방법이다.
- 이러한 기능이 바로 git의 branch 기능이다. branch를 이용하면 복사본을 쉽게 만들 수 있다.

 

 

● branch : 단순하게 말해 프로젝트의 복사본(정확히는 commit의 복사본)

- branch를 하나 만들어보자

출처 - 코딩애플 매우쉽게 알려주는 git & github

 ex) 쇼핑몰을 만들고 있는데 새로운 기능이 필요하다.
- 현재 작업 폴더에서 쇼핑몰을 만드는 코드를 짜고 있다고 해보자.
- 이때 잘 만들다가 같자기 무릎 탁치고 머리 탁치코 다시 왼쪽 팔꿈치 탁치고 쿠폰 기능을 추가하고 싶은 생각이 들었다.
- 근데 내가 지금 잘 만들고 있는 코드 덩어리에다가 갑자기 쿠폰 기능을 추가하면 뭔가 찜찜하고 위험하고 복잡할 것 같다.
- 그래서 원본 소스코드를 직접 수정하는게 아니라 프로젝트의 사본을 만든 후 거기다가 먼저 개발을 해보자는 것이다.
- 이때 branch를 하나 만들면 된다.

git branch 브랜치이름 
git branch coupon  -->  branch 이름을 'coupon'이라고 지었다.

- 위의 명령어를 입력하면 프로젝트 사본이 하나 생성된다.(정확히는 최근 commit의 사본)

이런 형태이다.

- coupon branch로 이동하고 싶으면 아래의 명령어를 입력하면 된다.

git switch 브랜치이름
git switch coupon
cf) 예전 명령어 : git checkout 브랜치명

- 다시 main branch로 돌아가고 싶으면  -->  git switch main

git switch coupon / 가장 왼쪽에 coupon branch가 왔다.
git switch main / 가장 왼쪽에 main branch가 왔다.

git status

- 현재 어떤 branch에 있는지 까먹었으면 해당 명령어를 통해 알 수 있다.

git status

 

branch에서 개발을 해보자

- 이제 coupon branch에서 파일도 새로 만들고 개발도 한 후 git add / git commit을 몇 번 해보자
- master 혹은 main branch에서도 기존 파일들에 commit 몇 번 해보자

coupon branch에서 파일을 만든 후 git add / git commit을 진행했다.
출처 - 코딩애플 매우쉽게 알려주는 git & github

- 지금의 상황을 그림으로 그려보면 위와 같다.
- 사실 저번 글까지 commit 하고 작업하던 곳은 하나의 branch였다.(= main branch 또는 master branch)
coupon branch에서 작업한 내용은 원래 branch인 main branch에 아무런 영향을 미치지 않는다.

- coupon branch에서 다시 main branch로 이동하면 coupon branch에서 작업한 파일들이 파일 목록에서 보이지 않는다.

(독립적으로 개발이 가능하다는 의미)

coupon branch
main branch / coupon branch에서 작성한 coupon1.txt, coupon2.txt 파일이 보이지 않는다.

git log --graph --oneline --all

- branch와 commit 내역을 한 눈에 그래프로 보고 싶으면 해당 명령어를 입력하면 된다.

git log --graph --oneline --all

Q. git log 하면 나오는 (HEAD -> main)은 무슨 의미?
A. 나의 현재 위치(현재 main branch에 있다는 의미)

 

 

● branch 합치기

- coupon branch에서 개발했던 것을 main branch에 합치고 싶다.

출처 - 코딩애플 매우쉽게 알려주는 git & github

- branch에서 작업한 코드가 이제 괜찮다 싶으면 원본 코드가 있는 master 또는 main branch에 합치면 된다.
- branch를 합치는 것을 전문용어로 'merge'라고 한다.
- merge를 통해 다른 branch에서 개발했던 내용을 main branch에 합칠 수 있다.

git switch main
git merge 브랜치명

git switch main  --> 반드시 main branch일 필요는 없다. 기준이 되는 branch로 이동만 하면 된다.
git merge coupon --> coupon branch의 코드들이 main/master branch에 합쳐진다.

- merge를 하고 싶으면 아래의 순서를 따르면 된다.
1. main/master branch로 다시 이동
2. [git merge 브랜치명] 입력

merge 성공

- conflict 하는 파일이 없었기에 merge가 성공적으로 완료됐다.

- 이제 main branch에서도 coupon branch에서 작업한 파일(coupon1.txt, coupon2.txt)이 보이는 것을 확인할 수 있다.

git log --graph --oneline --all

- merge 후, git log를 통해 branch가 합쳐진 것을 확인할 수 있다.

 

 

 merge 주의사항

- 위의 merge에서는 main branch와 coupon branch에서 서로 다른 파일을 수정 & 커밋 했기에 conflict가 발생하지 않았다.

- 하지만 main branch와 coupon branch에서 각각 같은 파일, 같은 줄을 수정했을 경우 merge conflict가 발생한다.

이런 경우에 conflict가 발생한다. / 출처 - 코딩애플 매우쉽게 알려주는 git & github

- 이 경우 에디터로 해당 파일을 열어보면 충돌사항이 적혀있다.

출처 - 코딩애플 매우쉽게 알려주는 git & github
출처 - 코딩애플 매우쉽게 알려주는 git & github

- 직접 conflict를 일으켜봤다. 각 branch에서 app.txt의 첫 번째 줄을 동시에 수정한 후 commit 했다.

- conflict 발생 시에는 둘 중 어떤 코드를 적용할지 고르면 된다.
- <<<< / >>>> / ==== 같은 쓸데없는 것들은 다 지우고 원하는 코드만 남기면 된다.
- 어떤 코드를 남길지 결정했으면 아래의 명령어를 입력하자

git add 파일명
git commit -m '메세지'
--> 새로운 commit 생성 & merge conflict 해결 + branch 합치기 완료

cf) VSCode의 경우 Accept Incoming Change 같은 버튼을 제공해주는데 그거 누르면 편리

conflict 해결 후 main branch의 app.txt 파일

 

- 협업 시 branch의 유용함은 아래와 같다.

1. 여러 사람과 협업할 때 branch를 만들어서 작업하면 편리하며 안정적인 개발이 가능
2. 다수의 인원이 동시에 똑같은 소스코드를 수정하고 저장해버리면 그 파일은 꼬인 이어폰 줄처럼 된다.

 

- 그렇기에 현재 소스코드에 기능을 추가하고 싶으면 아래의 절차에 따라 개발하면 된다.

1. branch로 프로젝트 사본을 만든 후 해당 branch에서 먼저 개발 진행
2. 새로운 기능 테스트 후 괜찮다 싶으면 main branch에 다시 합친다.

 

 

요약

1. 브랜치 생성
git branch 브랜치명

2. 브랜치 이동
git switch 브랜치명

3. 브랜치 합치기
main/master branch로 이동 후, git merge 브랜치명

4. 브랜치마다 commit 내역을 그래프로 보고싶으면
git log --graph --oneline --all

5. 브랜치 합칠 때 conflict가 발생
파일 열어서 수정한 후 git add, git commit
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함