programing

최근 커밋에 대해서만 GitHub에서 꺼내기 요청 전송

closeapi 2023. 5. 11. 21:29
반응형

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

이를 위해, 나는:

  1. 원래 프로젝트가 분기된 SHA에서 새 분기를 생성했습니다.
  2. 원래 프로젝트에서 모두 제거됨
  3. 체리는 제가 제출하고 싶은 커밋을 풀 요청으로 선택했습니다.
  4. 모든 것을 깃허브로 밀어 올렸습니다.

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

  1. git branch my-feature-request 9685770
  2. git checkout my-feature-request
  3. git pull https://github.com/original_project/original_project.git
  4. 깃체리픽 b67627b
  5. 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

반응형