PR을 마스터와 동기화하려고 할 때 "git merge" 문제를 해결하는 방법

PR을 마스터와 동기화하려고 할 때 "git merge" 문제를 해결하는 방법

StackExchange의 다른 곳에 제공된 답변에서 제가 이해하는 한, 프로세스는 간단해야 합니다.

a) git checkout master
b) git fetch origin
c) git pull origin
d) git push myremote # named aixtools
e) git checkout bpo-XXXXX
f) git merge master
g) git push myremote

g) 단계까지 모든 것이 예상대로 작동합니다. "PR" 대신 "소스"의 태그일 때 동기화를 유지하려고 노력했는데 프로세스가 잘 작동했습니다.

도움, 지혜, 지도 등에 대해 많은 감사를 드립니다.

현재 단계 g

michael@x071:[/data/prj/python/git0/gcc-python3-3.7]git status
On branch bpo-11191
Your branch is ahead of 'aixtools/bpo-11191' by 564 commits.
  (use "git push" to publish your local commits)
nothing to commit, working tree clean
michael@x071:[/data/prj/python/git0/gcc-python3-3.7]git push aixtools
Username for 'https://github.com':
Password for 'https://[email protected]':
To https://github.com/aixtools/cpython.git
 ! [rejected]        bpo-11191 -> bpo-11191 (non-fast-forward)
error: failed to push some refs to 'https://github.com/aixtools/cpython.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

또 다른 날: 재설정 및 병합과 거기에 있는 몇 가지 예제에 대해 자세히 읽은 후 로컬 마스터를 가져오는 대신 로컬 마스터에 커밋한 다음 로컬 "마스터"와 로컬 브랜치를 병합해야 한다고 생각했습니다. 또한 "다른 리모컨"에서 병합으로 "당겨"기만 하면 됩니다.

어쨌든 - 로컬 상황의 백업을 복원했습니다(git을 사용하여 "새로운" 것을 시도할 때 항상 복사본을 만듭니다). 다음 내용이 "로컬" 상태에 대한 의견/질의에 답변해 주기를 바랍니다.

michael@x071:[/data/prj/python/git0/gcc-python3-3.7]git branch
* bpo-11191
  master
michael@x071:[/data/prj/python/git0/gcc-python3-3.7]git status
On branch bpo-11191
Your branch is up-to-date with 'aixtools/bpo-11191'.
nothing to commit, working tree clean
michael@x071:[/data/prj/python/git0/gcc-python3-3.7]git diff aixtools/bpo-11191
michael@x071:[/data/prj/python/git0/gcc-python3-3.7]

또는

michael@x071:[/data/prj/python/git0/gcc-python3-3.7]git log --oneline | head -1
5a3284f (HEAD -> bpo-11191, aixtools/bpo-11191) Fix test_run and related tests Almost fix test_search_cpp
michael@x071:[/data/prj/python/git0/gcc-python3-3.7] aixtools/bpo-11191 | head -1     <
5a3284f (HEAD -> bpo-11191, aixtools/bpo-11191) Fix test_run and related tests Almost fix test_search_cpp

따라서 질문을 다시 표현해야 할 수도 있습니다.

  • 로컬로 병합해야 합니까?
  • "프로젝트 소유자"라고도 불리는 "다른 원격"에서 가져오시나요?
  • 완전히 다른 것?

다음 시도 - 병합을 사용하세요. (다른 브랜치에서 병합해야 할 수도 있습니다. "master"는 이제 3.7입니다(추측합니다). 따라서 cpython/3.7에서 병합해야 할 수도 있습니다.

그래서 이제 다시 "방법"을 느낍니다.

기본적으로 현재 개발과 여전히 "동기화"되어 있는지 유지/확인하고 현재 상태로 PR을 업데이트하려는 PR이 있습니다. 내가 원하는 한 가지 부작용은 PR이 "검증 프로세스"를 통해 다시 재평가된다는 것입니다.

다음 버전까지 "cpython"이 내 PR을 병합하지 않는 상황에 직면할 수도 있습니다. 이런 일이 발생하면 가능하다면 git을 사용하여 공개 PR(일명 bpo-XXXXX)을 "AIX 릴리스" 분기로 "병합" 및/또는 "풀"하고 싶습니다.

내가 보는 단계는 다음과 같습니다.

a) checkout the official release branch
b) create and checkout a new "aix-release" branch
c) merge my (local) branches, one at a time, into the new branch
d) commit (and push) the new "release"

따라서 새 릴리스로의 병합을 단순화/검증하기 위해 bpo-XXXXX를 마스터 및/또는 명명된 브랜치의 최신 "동기화"와 함께 알고 "저장"하고 싶습니다.

나도 알아, 나는 git에 관해서는 일요일 운전사야. 이것은 당신에게 분명할 수 있습니다. 그러나 나는 많은 사람들에게(적어도 내가 혼자가 아니길 바란다 :smile:), git이 하는 일이 간단하지 않다고 생각한다. 매우 강력합니다. 그렇습니다. 하지만 저는 그 힘에 압도당했습니다. 당신의 도움을 주셔서 감사합니다!

(참고: 마지막 시도, 새 시도 실패 - 어떤 특정 단계(체크아웃, 병합, 푸시)가 사용되었는지 궁금합니다. 그리고 모든 것이 작동하게 했죠? 내 bpo를 받고 푸시한 다음 병합하고 커밋(로컬로)했습니까? 그런 다음 푸시하거나 다른 작업 흐름을 사용합니다. 제가 찾고 있는 것은 "자연스러운" 작업 흐름입니다.

michael@x071:[/data/prj/python/git0/gcc-python3-3.7]git merge cpython/master
...
Merge made by the 'recursive' strategy.
...

michael@x071:[/data/prj/python/git0/gcc-python3-3.7]git status
On branch bpo-11191
Your branch is ahead of 'aixtools/bpo-11191' by 564 commits.
  (use "git push" to publish your local commits)
nothing to commit, working tree clean

michael@x071:[/data/prj/python/git0/gcc-python3-3.7]git push aixtools
Username for 'https://github.com':
Password for 'https://[email protected]':
To https://github.com/aixtools/cpython.git
 ! [rejected]        bpo-11191 -> bpo-11191 (non-fast-forward)
error: failed to push some refs to 'https://github.com/aixtools/cpython.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

michael@x071:[/data/prj/python/git0/gcc-python3-3.7]git pull cpython
remote: Counting objects: 1908, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 1908 (delta 752), reused 751 (delta 751), pack-reused 1153
Receiving objects: 100% (1908/1908), 1.11 MiB | 2.01 MiB/s, done.
Resolving deltas: 100% (1334/1334), completed with 161 local objects.
From https://github.com/aixtools/cpython
   fea0a12..b94d739  3.7        -> cpython/3.7
You asked to pull from the remote 'cpython', but did not specify
a branch. Because this is not the default configured remote
for your current branch, you must specify a branch on the command line.

michael@x071:[/data/prj/python/git0/gcc-python3-3.7]git pull cpython 3.7
From https://github.com/aixtools/cpython
 * branch            3.7        -> FETCH_HEAD
Auto-merging README.rst
CONFLICT (content): Merge conflict in README.rst
Auto-merging Python/importlib_external.h
CONFLICT (content): Merge conflict in Python/importlib_external.h
Auto-merging Python/importlib.h
CONFLICT (content): Merge conflict in Python/importlib.h
Auto-merging Python/compile.c
CONFLICT (content): Merge conflict in Python/compile.c
Auto-merging Objects/frameobject.c
CONFLICT (content): Merge conflict in Objects/frameobject.c
Auto-merging Lib/test/test_sys_settrace.py
CONFLICT (content): Merge conflict in Lib/test/test_sys_settrace.py
Auto-merging Lib/test/test_random.py
CONFLICT (content): Merge conflict in Lib/test/test_random.py
Auto-merging Lib/pydoc_data/topics.py
CONFLICT (content): Merge conflict in Lib/pydoc_data/topics.py
Auto-merging Lib/importlib/_bootstrap_external.py
CONFLICT (content): Merge conflict in Lib/importlib/_bootstrap_external.py
Auto-merging Lib/enum.py
Auto-merging Include/patchlevel.h
CONFLICT (content): Merge conflict in Include/patchlevel.h
Auto-merging Doc/whatsnew/3.7.rst
CONFLICT (content): Merge conflict in Doc/whatsnew/3.7.rst
Auto-merging Doc/tools/templates/indexsidebar.html
CONFLICT (content): Merge conflict in Doc/tools/templates/indexsidebar.html
Auto-merging Doc/tools/extensions/pyspecific.py
Auto-merging Doc/library/re.rst
CONFLICT (content): Merge conflict in Doc/library/re.rst
Auto-merging Doc/library/dis.rst
CONFLICT (content): Merge conflict in Doc/library/dis.rst
Auto-merging Doc/library/configparser.rst
CONFLICT (content): Merge conflict in Doc/library/configparser.rst
Auto-merging .travis.yml
CONFLICT (content): Merge conflict in .travis.yml
Auto-merging .github/appveyor.yml
CONFLICT (content): Merge conflict in .github/appveyor.yml
Automatic merge failed; fix conflicts and then commit the result.

답변1

당신은 그것을 시도하고 싶을 수도 있습니다 git pull -r. 이 시도는 로컬 변경 사항 "아래"에 원격 변경 사항을 추가한 다음 git push결과를 반환할 수 있습니다.

답변2

대답으로 - 나에게 맞는 것이 있기 때문입니다.

첫째, 잘못된 프로세스를 따르고 있는 것 같습니다.

지금 사용하고 있는 프로세스는 다음과 같습니다. -Startup-

  1. 어딘가에서 가지
  2. 내 포크를 "원본으로" 복제하세요.
  3. Remote_origin에 "어딘가"를 추가하세요.

나는 이 디렉토리를 "master"라고 부릅니다. 예를 들어 cpython 브랜치의 경우 cpython-master라고 부릅니다.

이 디렉토리에서 내가 수행하는 "유일한" 활동은 remote_origin에서 "가져오거나 당기는" 다음 "origin"으로 푸시하는 것입니다.

이전에는 작동했지만 브랜치를 생성할 때(PR로 커밋되었지만 아직 Remote_origin에 병합되지 않음) 최신 업데이트를 포함하도록 PR을 업데이트하고 싶었습니다.

그렇다면 지금은 무엇을 합니까?

  1. "My Fork"의 새로운 복제품으로 시작해보세요!
  2. 내가 "최신"이라고 생각하는 태그된 분기로 전환하세요.
  3. 이전 분기를 새 분기로 끌어오기/가져오기
  4. 모든 것이 제대로 작동하도록 하세요. 헹구고 이 단계를 다시 반복해야 할 수도 있습니다.
  5. 지점 이름을 선택하세요(이전 이름과 동일할 수도 있고 새 이름일 수도 있음).
  6. 현지 제출
  7. github에 푸시

나에게 중요한 것은 두 오리진의 업데이트를 내 "기존" 브랜치에 병합하려고 시도하는 것이 아니라 내 브랜치의 복제본에 있는 "새"remote_origins 태그로 이동한 다음 풀 요청을 상황에 "Pull"로 만드는 것입니다. .

왜 그것이 더 잘 작동하는지 잘 모르겠지만 적어도 나는 이해하지 못합니다.

hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

관련 정보