최근 커밋에 대해서만 GitHub에서 꺼내기 요청 전송
나는 github에서 프로젝트를 포크하고 성공적으로 나의 로컬 마스터를 변경하고 github에서 오리진을 추진하고 있습니다.풀 요청을 보내고 싶지만 마지막 커밋만 포함하고 싶습니다.github.com 의 꺼내기 요청 UI는 최근 9개의 커밋을 보여주는데 어떻게 필터링해야 할지 모르겠습니다.
새로운 로컬 지점을 생성해야 하는지, 확인하고 어떻게든 상류로 재설정하거나 재배치해야 하는지 이해하려고 했습니다.그러면 내 마스터의 ID에 의한 마지막 커밋을 새 로컬 지점에 적용하고 꺼내기 요청에 사용하시겠습니까?
저는 개념을 정확하게 파악하고 필요한 작업을 수행할 수 있는 올바른 명령줄을 파악하려고 합니다.
기본적으로 새 분기를 만들고 추가할 커밋을 선택해야 합니다.
참고: 체크아웃/체리픽 명령 전에 이러한 명령이 필요할 수 있습니다.
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>
그런 다음 github에 branch가 표시되고, branch로 전환하여 원하는 변경사항과 함께 pull 요청을 제출할 수 있습니다.
오리진 저장소에도 있는 최신 커밋부터 새 분기를 만듭니다.
git branch new-branch origin/master
git checkout new-branch
사용할 경우git cherry-pick
꺼내기 요청을 원하는 단일 커밋을 가져옵니다.을 이커이있지호는경출라고 하면,feature
이며, 은 "" "" " "" "이 될 것입니다. 이것은 다음과 같습니다.
git cherry-pick feature
이 패치가 충돌 없이 적용된다고 가정하면 풀 요청을 수행할 수 있는 분기가 생성됩니다.
두 번째 단계에서는 이제 사용자의 작업을 수행할 작업을 결정해야 합니다.feature
아직이 내용을 이를 새 지정하는 이 가장 일 것입니다(만약 이 커밋을 하는 것).git rebase
).
결국 저는 포크를 사용하여 원래 프로젝트에 풀 요청을 다시 제출해야 하는 상황에 처했습니다.
제가 가지고 있던 것:
- original_project
- forked_project (SHA의 원래 프로젝트에서 생성됨: 9685770)
- my_fork(SHA의 포크 프로젝트에서 생성됨: 207e29b)
- 원래 프로젝트에 다시 제출하고 싶었던 포크의 커밋(SHA: b67627b)
이를 위해, 나는:
- 원래 프로젝트가 분기된 SHA에서 새 분기를 생성했습니다.
- 원래 프로젝트에서 모두 제거됨
- 체리는 제가 제출하고 싶은 커밋을 풀 요청으로 선택했습니다.
- 모든 것을 깃허브로 밀어 올렸습니다.
git 명령은 다음과 같았습니다.
- git branch my-feature-request 9685770
- git checkout my-feature-request
- git pull https://github.com/original_project/original_project.git
- 깃체리픽 b67627b
- git push origin my-feature-request
그런 다음 원래 프로젝트에 대한 풀 요청을 위한 분기로 my-feature-request를 선택했습니다.
거의 효과가 있었습니다.
git checkout -b upstream upstream/master
git cherry-pick <SHA hash of commit>
git push origin upstream
유일한 차이점은 다음과 같습니다.
git push origin upstream:upstream
저는 마지막 줄을 변경해서 깃푸쉬가 제 깃허브 레포에 업스트림 브랜치를 만들어서 홍보를 할 수 있도록 해야 했습니다.
저는 이미 현재 지점으로 다시 끌어오기 요청으로 분리하고 싶은 커밋을 수행했습니다.
그래서 나는 새로운 지점을 확인했습니다.
git checkout -b isolated-pull
그리고 여기서 제 솔루션이 @Kevin Hakanson의 솔루션과 다른 점이 있습니다. 이 지점을 제가 차별화하고 싶은 역사의 위치로 재설정해야 하기 때문입니다.
git reset --hard [sha-to-diff-by]
그리고 분리된 꺼내기 요청을 만들 커밋을 선택합니다.
git cherry-pick [my-isolated-commit-sha]
마침내 원격으로 밀어 올립니다.
git push origin isolated-pull
그리고 요청 datshi.
새 (임시) 지점을 생성하고, 체리픽을 생성하고, 해당 지점에 대한 풀 요청을 생성하는 솔루션은 만족스럽지 못했습니다.일련의 커밋을 사용할 수 있도록 저장소를 변경하고 싶지 않았기 때문에 다음과 같은 대안을 생각해 냈습니다.
먼저 모든 관련 커밋에 대한 패치 파일을 만듭니다.
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
(원격 repo의 이름으로 표시됨), 이전에 사용했던 지점 또는 커밋이 다시 체크아웃되고 이전 변경 사항이 저장소에서 팝업됩니다.
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 프로그래머나 git 전문가가 아닙니다. 따라서 제가 놓친 사례가 있다면 더 잘 자동화될 수 있는지 알려주십시오!)
언급URL : https://stackoverflow.com/questions/5256021/send-a-pull-request-on-github-for-only-latest-commit
'programing' 카테고리의 다른 글
Bash에서 변수로 정의된 숫자 범위에서 반복하는 방법은 무엇입니까? (0) | 2023.05.16 |
---|---|
WPF의 app.config에서 값 목록 모음을 가져오는 방법은 무엇입니까? (0) | 2023.05.11 |
C#의 부분 수업은 나쁜 디자인입니까? (0) | 2023.05.11 |
Xcode 6의 AutoLayout 제약조건을 사용한 애스펙트 핏 거동 에뮬레이션 (0) | 2023.05.11 |
IntelliJ IDEA에서 예외 스로더 강조 (0) | 2023.05.11 |