티스토리 뷰
● 도입
- 코딩을 하다보면 당연히 새로운 기능이 추가된다.
- 이때 이 기능(코드)을 원본 파일에 추가하고 커밋해도 되지만 만약 이 과정에서 지금까지 작동하던 프로그램이 망가지면 큰일이다.
- 이러한 걱정 없이 안전하게 새로운 기능을 추가하고 싶으면 '프로젝트의 복사본을 만든 후' 거기에 먼저 개발을 해보는 것도 좋은 방법이다.
- 이러한 기능이 바로 git의 branch 기능이다. branch를 이용하면 복사본을 쉽게 만들 수 있다.
● branch : 단순하게 말해 프로젝트의 복사본(정확히는 commit의 복사본)
- branch를 하나 만들어보자
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 status
- 현재 어떤 branch에 있는지 까먹었으면 해당 명령어를 통해 알 수 있다.
branch에서 개발을 해보자
- 이제 coupon branch에서 파일도 새로 만들고 개발도 한 후 git add / git commit을 몇 번 해보자
- master 혹은 main branch에서도 기존 파일들에 commit 몇 번 해보자
- 지금의 상황을 그림으로 그려보면 위와 같다.
- 사실 저번 글까지 commit 하고 작업하던 곳은 하나의 branch였다.(= main branch 또는 master branch)
- coupon branch에서 작업한 내용은 원래 branch인 main branch에 아무런 영향을 미치지 않는다.
- coupon branch에서 다시 main branch로 이동하면 coupon branch에서 작업한 파일들이 파일 목록에서 보이지 않는다.
(독립적으로 개발이 가능하다는 의미)
git log --graph --oneline --all
- branch와 commit 내역을 한 눈에 그래프로 보고 싶으면 해당 명령어를 입력하면 된다.
Q. git log 하면 나오는 (HEAD -> main)은 무슨 의미?
A. 나의 현재 위치(현재 main branch에 있다는 의미)
● branch 합치기
- coupon branch에서 개발했던 것을 main branch에 합치고 싶다.
- 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 브랜치명] 입력
- conflict 하는 파일이 없었기에 merge가 성공적으로 완료됐다.
- 이제 main branch에서도 coupon branch에서 작업한 파일(coupon1.txt, coupon2.txt)이 보이는 것을 확인할 수 있다.
- merge 후, git log를 통해 branch가 합쳐진 것을 확인할 수 있다.
● merge 주의사항
- 위의 merge에서는 main branch와 coupon branch에서 서로 다른 파일을 수정 & 커밋 했기에 conflict가 발생하지 않았다.
- 하지만 main branch와 coupon branch에서 각각 같은 파일, 같은 줄을 수정했을 경우 merge conflict가 발생한다.
- 이 경우 에디터로 해당 파일을 열어보면 충돌사항이 적혀있다.
- 직접 conflict를 일으켜봤다. 각 branch에서 app.txt의 첫 번째 줄을 동시에 수정한 후 commit 했다.
- conflict 발생 시에는 둘 중 어떤 코드를 적용할지 고르면 된다.
- <<<< / >>>> / ==== 같은 쓸데없는 것들은 다 지우고 원하는 코드만 남기면 된다.
- 어떤 코드를 남길지 결정했으면 아래의 명령어를 입력하자
git add 파일명
git commit -m '메세지'
--> 새로운 commit 생성 & merge conflict 해결 + branch 합치기 완료
cf) VSCode의 경우 Accept Incoming Change 같은 버튼을 제공해주는데 그거 누르면 편리
- 협업 시 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
'Git' 카테고리의 다른 글
#6 git revert, reset, restore (0) | 2022.11.10 |
---|---|
#5 다양한 merge 방법 - 3-way / fast-forward / rebase / squash / branch 삭제 (1) | 2022.11.08 |
#3 git add, commit, diff / Git graph Extensions (0) | 2022.11.01 |
#2 git commit, add로 파일 버전 생성 / staging area & repository (0) | 2022.10.31 |
#1 Git 설치 (0) | 2022.10.30 |
- Total
- Today
- Yesterday
- 프로세스
- Stream
- spring
- node.js
- git
- 빅데이터
- java
- 알고리즘
- Advanced Stream
- OS
- db
- 프로그래머스
- SQL
- Spring Boot
- Phaser3
- Java8
- 메모리
- MongoDB
- SpringBoot
- MySQL
- jpa
- Phaser
- nosql
- 운영체제
- 자료구조
- 코테
- 빅데이터 분석기사
- DART
- 코딩테스트
- API
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |