티스토리 뷰

git

Git in the office

주먹불끈 2020. 4. 28. 17:17

개요

 

명이 함께 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 아래와 같이 설정하여 몇몇 기능을 단축하여 사용중임 (일부 공유)

 

[alias]

al = config --get-regexp alias

co = checkout

cb = checkout -b

rb = rebase -i

st = status

cm = commit

pl = pull

ps = push

 

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 으로 정리된다.

 

하나로 만들 commit 들을 선택하여

pick squash(=s) 바꿔준다.

다음에는 기존 commit 들을 지우고,

하나의 commit message 작성한다

<before>

 

<after>


 

<before>

 

<after>


 

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
«   2024/11   »
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
글 보관함