최신 커밋에 대해서만 GitHub에 풀 요청을 보냅니다.
github에서 프로젝트를 분기하고 로컬 마스터를 성공적으로 변경하고 github에서 원점을 푸시하려고합니다. 풀 요청을 보내고 싶지만 마지막 커밋 만 포함하고 싶습니다. github.com의 풀 요청 UI는 마지막 9 개의 커밋을 보여 주며 필터링하는 방법을 모르겠습니다.
새 로컬 브랜치를 생성 해야하는지 이해하려고 노력하고 있는지 확인한 다음 어떻게 든 업스트림으로 재설정하거나 리베이스합니까? 그런 다음 ID로 마스터에서 마지막 로컬 커밋을 새 로컬 브랜치에 적용하고 풀 요청에 사용합니까?
나는 개념을 올바르게하고 필요한 것을 수행하기 위해 올바른 명령 줄을 알아 내려고 노력하고 있습니다.
당신은 기본적으로 새로운 지점 및 작성해야 체리 - 선택 당신이 그것에 추가 할 커밋.
참고 : checkout / cherry-pick 명령 이전에 필요할 수 있습니다.
git remote add upstream <git repository>
git remote update
git checkout -b <new-branch-name> upstream/master
git cherry-pick <SHA hash of commit>
git push origin <new-branch-name>
그 후 <new-branch-name>
github에 브랜치를 보고 스위치로 전환 한 후 원하는 변경 사항으로 pull 요청을 제출할 수 있습니다.
오리진 저장소에도있는 최신 커밋에서 시작하여 새 브랜치를 작성하십시오.
git branch new-branch origin/master
git checkout new-branch
그런 다음 git cherry-pick
풀 요청을 원하는 단일 커밋을 얻는 데 사용 하십시오. 이 커밋이있는 브랜치가 호출 feature
되고 원하는 커밋이이 브랜치의 최신 커밋 인 경우
git cherry-pick feature
이 패치가 충돌없이 적용된다고 가정하면 이제 풀 요청을 수행 할 수있는 지점이 생겼습니다.
두 번째 단계에서는 이제 feature
브랜치 로 수행 할 작업을 결정해야합니다 . 이 브랜치에 대한 변경 사항을 아직 게시하지 않은 경우 가장 좋은 절차는 새 브랜치에서이 브랜치를 리베이스하는 것입니다 (그리고 마지막 커밋을 자동으로 수행하지 않으면 제거합니다 git rebase
).
나는 포크를 포크하고 원래 프로젝트에 풀 요청을 다시 제출하고 싶었던 상황에서 끝났다.
나는했다 :
- orignal_project
- forked_project (SHA의 원본 프로젝트에서 생성 : 9685770)
- my_fork (SHA의 분기 프로젝트에서 작성 : 207e29b)
- 원래 프로젝트에 다시 제출하고 싶은 포크 (SHA : b67627b)에 대한 커밋
이를 위해 나는 :
- 원본 프로젝트가 분기 된 SHA에서 새 분기를 만들었습니다.
- 원래 프로젝트에서 모두 가져 왔습니다.
- 체리는 풀 요청으로 제출하고 싶은 커밋을 선택했습니다.
- 모든 것을 github에 푸시했습니다.
git 명령은 다음과 같습니다.
- 자식 분기 내 기능 요청 9685770
- 자식 체크 아웃 내 기능 요청
- git pull https://github.com/original_project/original_project.git
- 자식 체리 픽 B67627B
- git push origin 내 기능 요청
그런 다음 원래 기능 요청을 원래 프로젝트에 대한 풀 요청의 분기로 선택했습니다.
이것은 거의 나를 위해 일했다 :
git checkout -b upstream upstream/master
git cherry-pick <SHA hash of commit>
git push origin upstream
유일한 차이점은 다음과 같습니다.
git push origin upstream:upstream
git push가 GitHub 리포지토리에서 업스트림 분기를 만들어 PR을 만들 수 있도록 마지막 줄을 변경해야했습니다.
나는 이미 현재 분기에 풀 요청으로 분리 할 수있는 커밋을 만들었습니다.
그래서 새로운 지점을 확인했습니다
git checkout -b isolated-pull
그리고이 솔루션을 @Kevin Hakanson 's와 다른 곳에서,이 분기를 내가 역사에서 다른 곳으로 재설정해야하기 때문에
git reset --hard [sha-to-diff-by]
그리고 격리 된 끌어 오기 요청을 작성하려는 커밋을 선택하십시오.
git cherry-pick [my-isolated-commit-sha]
마지막으로 리모컨으로 밀어
git push origin isolated-pull
그리고 요청 데이터를 가져옵니다.
새로운 (임시) 브랜치, 체리 픽을 생성하고 해당 브랜치에 대한 풀 요청을 생성하는 솔루션은 나를 만족시키지 못했습니다. 커밋 세트를 사용할 수 있도록 저장소를 변경하고 싶지 않았으므로 다음 대안을 생각해 냈습니다.
먼저 관심있는 모든 커밋에 대한 패치 파일을 만듭니다.
git format-patch -1 <sha>
관심있는 커밋이 마지막 커밋 인 경우 HEAD
대신 사용할 수 있습니다 <sha>
.
이제 패치를 소스 리포지토리의 관리자에게 보내서 적용 할 수 있습니다.
git branch new-branch <master or some older commit where the fork diverged>
git checkout new-branch
git am < <the patch>
...
git checkout master
git merge new-branch
마지막으로 풀 리퀘스트에 의해 임시 브랜치가 병합되었지만 포크 리포지토리에 추가 브랜치가없는 것처럼 보입니다.
@ kevin-hakanson의 답변을 바탕 으로이 작은 bash 스크립트를 작성 하여이 프로세스를 쉽게했습니다. 업스트림 리포지토리가 존재하지 않으면 (URL을 요청하는 경우) 새 브랜치의 이름과 해당 브랜치를 선택하기위한 커밋의 태그 / SHA를 입력하라는 메시지가 표시됩니다. 현재 브랜치 또는 커밋을 확인한 다음 변경 사항을 숨겨서 새 브랜치를 체크 아웃 할 수 있습니다. 병합 전략은 체리 선택 커밋의 변경 사항을 유지합니다. 새 브랜치를 origin
(원격 리포지토리의 이름으로 가정)으로 푸시 한 후 , 이전에 있었던 브랜치 또는 커밋이 다시 체크 아웃되고 이전 변경 사항이 숨김에서 튀어 나옵니다.
if ! git remote | grep -q upstream; then
read -p "Upstream git repo URL: " upstream
git remote add upstream $upstream
git remote update
fi
read -p "Feature branch name: " feature_branch
# note: giving "master" is the same as giving the SHA it points to
read -p "SHA of commit to put on branch: " sha
current_branch=$(git rev-parse --abbrev-ref HEAD)
if [ "$current_branch" == "HEAD" ]; then
# detached HEAD; just get the commit SHA
current_branch=$(git rev-parse --short HEAD)
fi
git stash
git checkout -b $feature_branch upstream/master
git cherry-pick --strategy=recursive -X theirs $sha
git push origin $feature_branch
git checkout $current_branch
git stash pop
(이것은 몇 가지 간단한 테스트에서 나에게 도움이되었지만 bash 프로그래머 나 자식 전문가가 아니므로 놓친 사례가 있으면 더 잘 자동화 될 수 있는지 알려주십시오!)
참고 URL : https://stackoverflow.com/questions/5256021/send-a-pull-request-on-github-for-only-latest-commit
'IT' 카테고리의 다른 글
방금 모든 ASP.Net 웹 사이트가 느린 이유를 발견했으며 그에 대한 조치를 취하려고합니다. (0) | 2020.03.26 |
---|---|
데이터베이스로 NoSQL (MongoDB) vs Lucene (또는 Solr) (0) | 2020.03.26 |
UTF-8 : 일반? (0) | 2020.03.26 |
ActiveRecord의 부동 대 소수 (0) | 2020.03.26 |
ArrayList.clear ()와 ArrayList.removeAll ()의 차이점은 무엇입니까? (0) | 2020.03.26 |