😖

출근하면 뭐부터 해야 하죠? 제 커밋은 어떻게 올려요?

Date
2021/04/03
Tags
Git
Tutorial
Created by

origin과 upstream에 대한 이해

우리 팀의 경우 회사 Organization에 있는 원본 repository(이하 upstream)각자 fork해서 fork한 repository(이하 origin)에 작업한 뒤, upstream에 Pull Request를 날리고 이를 merge하는 식으로 작업한다.
따라서 upstream에 새로운 PR이 merge되었을 경우, 즉 내가 출근하기 전에 누군가 작업을 했을 경우 작업물을 origin으로 받아와야 한다. 항상 origin을 최신 상태로 유지해야 한다.

origin을 항상 최신 상태로 유지

우리 팀 Repository의 기본 branch는 dev이다. dev에서 branch를 따서 모든 작업을 수행하고 Pull Request를 날려서 dev에 다시 합친다. 따라서 출근하자마자, 또는 Push하기 전에 origindev를 항상 최신 상태로 유지해야 한다.
$ git checkout dev $ git pull upstream dev $ git push origin dev
Shell
복사
이렇게 하면 로컬과 origin의 상태가 upstream과 동일해진다.

branch 따서 작업하기

dev에 바로 commit하지 않도록 주의하자! 기능 구현, 버그 수정 등 모든 작업은 해당 작업의 branch에서 이루어진다. 현재 branch가 dev인 상황에서 새로운 branch를 따려면 다음과 같이 하면 된다.
$ git branch my-feature-branch $ git checkout my-feature-branch
Shell
복사
혹은 다음과 같이 한 번에 할 수도 있다.
$ git checkout -b my-feature-branch
Shell
복사
branch가 바뀐 것을 확인한 뒤, 파일들을 마음껏 수정하면 된다.

작업한 파일들을 commit하기

commit도 중간중간 마음껏 하자.
$ git add . $ git commit -m "ADD: implement my-feature"
Shell
복사

커밋들을 최신화해서 origin에 올리기

작업 branch에서 할 일이 끝났으면, 이를 branch를 땄던 원본 branch(지금 같은 경우는 dev)에 합쳐야 한다.
원본 branch에 작업 branch를 합치는 방법에는 두 가지가 있다 — Rebase, Merge
Rebase는 원본 branch에서 작업 branch를 땄던 시점을 최신 시점으로 그대로 이동한다고 보면 된다. 작업 branch에 커밋했던 모든 내용들이 최신 시점에서 커밋한 것으로 수정된다.
$ git rebase upstream/dev
Shell
복사
Merge는 작업 branch의 내용을 원본 branch에 합친다. 마지막에 원본 branch에 Merge commit 하나가 생긴다.
$ git merge upstream/dev
Shell
복사

앗! Merge conflict!

당황하지 말자! 그리고 항상 명심하자. dev의 최신 상태와 내 작업물을 합치려 할 때 생기는 오류일 뿐이다.
누군가가 내가 작업하고 있던 와중에 upstreamdev에 PR을 성공시켜서 dev의 최신 내용물이 변경된 상태이고, 그 중 일부와 내 변경 사항들이 겹치는(합칠 수 없는) 상태인 것이다.
위 두 command 중 하나를 실행해서 Merge conflict가 났을 경우, 현재 branch가 rebase/merge branch로 변경된다. 이 상태에서는 Merge conflict를 해결하고 계속하거나, rebase/merge를 취소할 수 있다.
rebase나 merge를 계속하려면 어느 파일에서 충돌이 났는지 확인하고, 해당 파일로 가서 직접 충돌을 수정하고 다시 rebase나 merge를 계속하면 된다.
$ git status # 어느 파일에서 충돌이 났는지 확인 $ ... # 해당 파일의 충돌된 부분들을 전부 직접 수정 $ git add . $ git rebase --continue # or $ git merge --continue
Shell
복사
rebase나 merge를 취소하려면 다음과 같이 하면 된다.
$ git rebase --abort # or $ git merge --abort
Shell
복사

origin에 push

$ git push origin my-feature-branch
Shell
복사
origin에 push하고 레포 사이트를 확인해 보면 PR을 만들 수 있다.

References