git-flow로 Github에서 협업을 하는 과정을 알아보자.
GitHub에 코드를 올리는 단계
- GitHub 사이트에서 프로젝트 저장소 만들기
- 내 컴퓨터 프로젝트 폴더에 초기화 명령어 내리기(이때부터 로컬 저장소 생성)
- GitHub에 만든 프로젝트 저장소 주소를 로컬 저장소에 알려주기
- 내가 생성하거나 변경한 파일 중 올리기를 원하는 것만 선택
- 선택한 파일들을 하나의 덩어리로 만들기 (=commit. 하나의 버전)
- 덩어리에 이름 붙여주기 (e.x. git commit -m "fix bug")
- 덩어리를 GitHub에 올리기 (git push origin master)
- 내가 만든 덩어리(=commit들=버전들)을 확인하고, 필요한 경우 옛날 버전으로 돌아갈 수도 있다.
#1. 단일 저장소에서 협업하기
- 내 컴퓨터에서 코드 작업
- 단계별 commit 만들기
- push
- 동료 개발자에게 pull request 보내기
- 동료 개발자가 본인 컴퓨터에 저장소를 pull
- 동료 개발자가 'fix/click-bug'브랜치를 만들어 버그를 고쳐준다
- fix/click-bug브랜치에서 작업이 끝나면 master 브랜치와 merge하기
브랜치 만들기 (git branch branch_name)
* 브랜치(branch)란? 한 줄로 쌓던 commit을 n줄로 쌓을 수 있게 만들어 주는 것.
* 브랜치를 사용하는 이유?
- 한 브랜치에서 공동작업을 할 경우, 동시에 똑같은 코드를 고쳐 충돌이 날 가능성이 있음
- 브랜치를 사용하면 충돌이 발생해도 명시적으로 문제 해결이 가능
#2. 오픈소스에 기여하기
- GitHub repository 페이지에서 Fork해서 내 계정으로 리포지터리 복사
- 원격 repo를 로컬에 받아오기
- pull request를 보내기 전에, 원본 저장소에 변경사항이 있는지 확인
- 포크된 내 repo에서 pull request 보내기
- 기존 repo 관리자가 코드가 마음에 들면 merge함
- 해당 repo의 contributer로 등록됨 + 내 개인 페이지에도 원본 repo 뜸
#3. 알아두면 편리한 명령
Stash
- commit하기는 애매하고, 코드를 날리기도 애매한데 리비전은 돌아가야 되는 상황에서 유용(책갈피같은 역할)
- 워킹 디렉토리에 unstaged 파일들을 백업하고 워킹 디렉토리를 깨끗한 상태(HEAD상태)로 만드는 기능
$ git stash save MY_STASH_NAME
* Stash에 들어갔는지 확인하는 방법
$ git stash list
* 마지막으로 Stash한 것 불러오기(Unstash)
$ git stash pop
Discard VS Remove
- Discard : 변경 내용을 삭제함 = 내가 변경한 내용만 처음으로 돌림(commit하기 전)
- Remove : 해당 파일을 삭제함
Cherry pick
- 다른 브랜치를 내가 작업한 브랜치로 합치는 커밋
- 충돌이 난 부분은 남겨두고 원하는 commit만 가져와서 반영, 업데이트할 수 있음
$ git cherry-pick COMMIT_NUMBER
Amend last commit
- 마지막으로 commit한 메세지 바꾸기
$ git commit --amend -m "바꿀 내용"
$ git push -f
Rebase
- fork한 저장소를 최신 원본과 동기화할 때 유용
- 베이스를 다시 정하는 것!! (히스토리 조작)
- push한 commit들 중에서 중간에 낀 메세지만 수정하고 싶을 때, git rebase -i 명령어로 원하는 시점으로 되돌아갈 수 있다.
$ git rebase -i --root
- 다시 되돌렸던 시간을 원상복구할 때(메세지 수정 후)
$ git rebase --continue
출처 : Yurim Jin님 블로그
https://milooy.wordpress.com/2017/06/21/working-together-with-github-tutorial/
초심자를 위한 Github 협업 튜토리얼 (with 토끼와 거북이)
git을 사용해 Github에서 협업을 하는 과정을 설명한 글입니다. 초심자를 대상으로 하며, SourceTree를 사용합니다.
milooy.wordpress.com