http://stackoverflow.com/questions/5256021/send-a-pull-request-on-github-for-only-latest-commit
http://kurogo.org/guide/github.html
git checkout -b upstream upstream/master
git cherry-pick sha1
git push origin upstream
원본 repository를 브랜치로 따고..
cherry-pick으로원하는 커밋만 merge 후
그걸 push해서 pull request로 보내는 개념인듯하다..
---- 위 내용대로 해보니 잘 안되는 부분도 있고... 설명이 부족한듯 해서...
step by step으로 직접 해보면서 정리.. ----
실제 후배의 repository를 fork하여 이를 가지고 테스트..
* 원본 repository : https://github.com/skywingzz/skywingDev.git (후배의 원본 repository)
* forked repository : https://github.com/need4spd/skywingDev.git (내쪽으로 fork해온 repository)
## 로컬에 Setting ##
1. 로컬에 git directory 생성
- mkdir test_git_repo
- cd test_git_repo
- git init
2. set upstream / origin remote
: origin은 내가 fork해온 repository, upstream은 원본 repository
- git remote add upstream https://github.com/skywingzz/skywingDev.git
- git remote add origin https://github.com/need4spd/skywingDev.git
3. fork해온 repository의 내용을 복사
: fork해온 repository의 내용이 로컬로 들어온다.
- git pull origin master
4. upstream remote에 대한 셋팅
: 원본 repository의 최신 수정된 내용이 upstream/master branch로 들어온다.
: 이후 원본 repository의 최신 commit 내용을 로컬로 반영 할 때도 git fetch upstream만 실행해주면 그 내용이 upstream/master 브랜치로 들어온다.
: 이걸 master로 merge 해주면, master branch (혹은 내가 작업하고 있는 branch)에도 내용을 반영 할 수 있다. 이를 활용 한 것이 http://devyongsik.tistory.com/534
- git fetch upstream
## 수정 및 commit ##
1. 작업을 할 branch를 생성
- git checkout -b work1 master
2. work1 branch에서 내용을 수정하고 commit을 한다. 여기서는 테스트를 위해서 3번의 commit을 커멘트 11,12,13으로 진행
[need4spd@need4spdui-MacBook-Air test_git_repo ]$ vi kk.text
[need4spd@need4spdui-MacBook-Air test_git_repo ]$ git add .
[need4spd@need4spdui-MacBook-Air test_git_repo ]$ git commit -m "11"
[work1 9d53b24] 11
0 files changed
create mode 100644 kk.text
[need4spd@need4spdui-MacBook-Air test_git_repo ]$ vi ss.text
[need4spd@need4spdui-MacBook-Air test_git_repo ]$ git add .
[need4spd@need4spdui-MacBook-Air test_git_repo ]$ git commit -m "12"
[work1 fcdc08b] 12
0 files changed
create mode 100644 ss.text
[need4spd@need4spdui-MacBook-Air test_git_repo ]$ vi tt.text
[need4spd@need4spdui-MacBook-Air test_git_repo ]$ git add .
[need4spd@need4spdui-MacBook-Air test_git_repo ]$ git commit -m "13"
[work1 2ce02b2] 13
0 files changed
create mode 100644 tt.text
- 여기서 13 커멘트를 가진 2ce02b2 commit만 pull request하고 싶은 상태
3. 해당 commit의 commit name을 확인
- git log
[need4spd@need4spdui-MacBook-Air test_git_repo ]$ git log -4
commit 2ce02b27285a623d6cbdd0764e279caac137e10f
Author: need4spd <need4spd@naver.com>
Date: Tue Dec 4 13:59:15 2012 +0900
13
4. upstream/master를 최신으로 만든다.
- git fetch upstream
5. 원본 repository의 최신 내용이 반영되어있는 upstream/master branch로부터 upstream2라는 이름의 branch를 생성
- git checkout -b upstream2 upstream/master
6. upstream2 branch에 있는지 확인
- git branch
[need4spd@need4spdui-MacBook-Air test_git_repo ]$ git branch
master
* upstream2
work1
7. 원하는 commit만 merge
- git cherry-pick 2ce02b27285a623d6cbdd0764e279caac137e10f
[upstream2 b73c988] 13
0 files changed
create mode 100644 tt.text
8. upstream2 branch의 커밋내용을 origin (fork한 repository)로 push
- git push origin upstream2
9. github에 접속하여 fork한 repository로 이동하여, upstream2 branch를 선택
10. push한 13번 커멘트의 commit을 pull request
좀 더 간단하게 정리하면..
1. 작업할 branch 생성
2. 작업 후 commit , pull request 할 commit을 선택
- 여기서 commit을 합치거나, 없앨수도 있겠다.
3. upstream/master를 up to date 상태로 만들고, 이것을 base로 branch를 추가한다. (이게 위 예에서 upstream2)
4. 3번에서 만든 branch에 cherry-pick 명령어로 commit을 선택하여 merge
5. origin (fork해온 repository) 에 push 후 pull request 가 되는듯..
이것 말고도.. 여러가지 방법들이 있는 것 같다. rebase를 사용한다거나...
아 어렵네..~ ㅎㅎ