IT

최신 커밋에 대해서만 GitHub에 풀 요청을 보냅니다.

lottoking 2020. 3. 26. 08:31
반응형

최신 커밋에 대해서만 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)에 대한 커밋

이를 위해 나는 :

  1. 원본 프로젝트가 분기 된 SHA에서 새 분기를 만들었습니다.
  2. 원래 프로젝트에서 모두 가져 왔습니다.
  3. 체리는 풀 요청으로 제출하고 싶은 커밋을 선택했습니다.
  4. 모든 것을 github에 푸시했습니다.

git 명령은 다음과 같습니다.

  1. 자식 분기 내 기능 요청 9685770
  2. 자식 체크 아웃 내 기능 요청
  3. git pull https://github.com/original_project/original_project.git
  4. 자식 체리 픽 B67627B
  5. 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

반응형