티스토리 뷰
개요
몇 명이 함께 Git 을 이용하여 프로젝트를 개발하며 소스코드의 버전을 관리한다고 할때에
현재 사용중인 가장 기본적인 프로세스를 정리해본다.
더하여 이를 블로그 포스팅하여 다른 분들과 의견을 나누고 새로운 것을 배운다.
상황
1) remote repository 를 통해 여러명이 소스코드 버전을 공유하고 있다.
2) add-user 라는 기능을 추가 개발하려고 한다. develop 브랜치에서 branch 를 따서 작업을 한다.
3) 이때 remote develop 에서는 다른 팀원들이 commit 을 push 중이다.
TL;DR
$git co feature/add-user - coding 후 $git add . && git cm -m "wip" 3회 $git rebase -i HEAD~3 $git fetch origin develop:develop $git co develop $git merge feature/add-user $git push $git branch -d feature/add-user | |
참고 .gitconfig 에 아래와 같이 설정하여 몇몇 기능을 단축하여 사용중임 (일부 공유)
|
Git in the office
Git command |
내용 | ||||
시작 상황 |
develop branch 이며, remote repo 인 origin 과 sync 가 맞추어져 있다.
| ||||
$git cb feature/add-user |
feature/add-user branch 를 땄다.
| ||||
아래 3회 반복 $echo 1 >> 1.txt $git add . && git cm -m "wip" |
3번의 commit 작업을 시뮬레이션 해보았다.
- 중간중간 저장을 할때, 잠시 작업을 멈추고 다른 작업을 할때에 임시로 wip 라고 commit 하고는 한다. - 혹은 더 작은 단계별로 commit 을 해두는 경우도 있다.
| ||||
$git rebase -i HEAD~3 |
3개의 commit 을 하나로 합쳐보자.
- 목적은 develop 에 나의 작업을 하나의 commit 으로 push 하려는 것이다. (깔끔!) - 3개의 commit 을 합치려면 HEAD~3 이렇게 외우면 편하다.
- 하나씩의 commit 에서의 변경사항을 체크하고 불필요한 로그, 테스트 코드들을 정리한다. - 전체를 아우르는 commit message 를 하나 작성해둔다. 1) git rebase -i HEAD~3 을 해주고 나오는 화면에서 맨 위 것을 제외한 아래 두 개를 squash 해준다. (s) 2) commit message 를 작성한 후 저장해주면 3개의 commit 이 하나의 commit 으로 정리된다.
git log 는 다음과 같이 된다.
| ||||
중간 상황. 그리고 참고 |
[이 부분은 참고만 할 것]
이때 우리가 보는 origin develop 는 최신의 상황을 반영한 것이 아니다. GitHub 를 통해서 Commit 을 1개 해보겠다. 그래도 local PC 의 origin/develop 에 대한 git log 는 변화가 없다.
$git fetch 를 해주면 아래와 같이 바뀐다. origin/develop는 commit 이 하나 늘었는데 local 의 develop 는 변경되지 않은 것이 보인다.
$git co develop && git pull 해주면 local 의 develop 도 최신 code 를 가지게 된다.
| ||||
$git fetch origin develop:develop |
이번에는 GitHub 에 commit 을 3개 해두었다.
현재의 branch 는 feature/add-user 인 상황에서 local 의 develop 를 origin 의 develop 에서 땡겨오게 했다. 참고링크: https://stackoverflow.com/a/16095458/6513756
아래와 같이 하나의 git command 로 1) feature/add-user branch 는 그대로 check out 인 상태로 2) develop branch 가 최신의 origin develop 로 pull 되었다.
| ||||
$git rebase develop |
드디어 rebase 이다. 현재까지의 작업을 간단 요약 해보자
1) (당시) 최신의 develop branch 에서 feature/add-user branch 를 딴다 2) 그리고 여러 번의 commit 을 한 뒤 구현을 완료하였다면 하나의 commit 으로 만들어준다. 3) 이때 동료들이 remote 의 develop branch 에 추가적인 commit 을 하였을 경우
우리의 목표는 아래와 같이 최신의 develop branch 에서 branch 를 따서 하나의 commit 으로 새로운 기능을 추가구현하는 것이다. 성공!
| ||||
$git co develop $git merge feature/add-user
그리고 $git push |
develop branch 에 feature/add-user 를 merge 하자
$git co develop $git merge feature/add-user
그리고 develop branch 를 push 하여 remote repo 에 공유하자
$git push
| ||||
$git br -d feature/add-user |
이제 필요없어진 feature/add-user 브랜치를 삭제해준다.
얼마나 깔끔하고 이쁜가? 최신의 develop branch 에서 나의 commit 하나만 더 얹어졌다.
|
좀더 생각해 볼 부분. 생략한 부분
1) pull request 를 통해 code review 하는 부분은 중요하고 의미있는 작업이겠으나 생략하였음
2) $git rebase develop 부분에서 conflict 가 발생할 수 있다.
- 동료의 commit 과 나의 commit 의 변경사항에 충돌이 있다는 것이다.
- 가능한 충돌이 없도록 작은 단위로 commit 하거나, 동료와 작업영역이 겹치도록 하는 것이 좋다.
적다보니 장황해 보이지만 이를 참고하여 나만의 git process, 나아가 팀의 git process 를 만들어가고 개선해가면 좋겠다.
'git' 카테고리의 다른 글
GitHub CLI 를 만져보자 - 2 (0) | 2020.09.23 |
---|---|
GitHub CLI 를 만져보자 - 1 (0) | 2020.09.22 |
.git - 쩜깃의 이해 (0) | 2019.01.24 |
git pull --rebase 를 쓰자 (4) | 2019.01.15 |
git commit 을 gpg 로 암호화하기 (0) | 2019.01.04 |
- Total
- Today
- Yesterday
- 오블완
- 노션
- notion
- go
- 영화
- bun
- 독서
- websocket
- 2023
- 독서후기
- Gin
- agile
- Shortcut
- ChatGPT
- folklore
- solid
- 인텔리제이
- strange
- github
- 체호프
- clean agile
- Bug
- 클린 애자일
- 잡학툰
- OpenAI
- 제이펍
- 티스토리챌린지
- API
- golang
- intellij
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |