Como resolver problemas de "git merge" ao tentar manter os PRs em sincronia com o mestre

0

Pelo que entendi de respostas dadas em outros lugares no StackExchange - o processo é supostamente simples:

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

Até o passo g) tudo funciona como esperado. E quando é uma tag da "origem" em vez de um "PR" que estou tentando manter em sincronia, o processo funciona bem.

Ajuda, sabedoria, orientação, et al é muito apreciada:

passo g atualmente

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.

Um dia mais: Estou pensando, depois de ler mais sobre reset e mesclar, e alguns dos exemplos lá - que ao invés de puxar para o meu mestre local, commit do master local, e então mesclar local branch com local ' mestre 'Eu também deveria apenas' puxar 'de' outro controle remoto 'como um tipo de mesclagem.

Em qualquer caso - Eu restaurei um backup da situação local (sempre faço uma cópia quando tento algum 'novo' para mim com o git) E espero que o seguinte responda o comentário / consulta com relação ao status do 'local'

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]

Ou

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

Então, talvez a pergunta precise ser reformulada:

  • devo mesclar localmente?
  • extrair de "outros remotos", também conhecidos como "proprietários de projetos"?
  • algo totalmente diferente?

Próxima tentativa - usando a mesclagem (talvez eu deveria ter mesclado de um ramo diferente. "mestre" era o que é agora 3.7 (eu estou supondo) - então talvez eu deveria ter fundido a partir do cpython / 3.7.

Então, agora eu sinto "howto" ish novamente.

Basicamente, eu tenho um PR que gostaria de manter / verificar que ele ainda está "em sincronia" com os desenvolvimentos atuais - e atualizar o PR com o status atual. Um (desejado por mim) efeito colateral é que o PR será reavaliado novamente pelo "processo de verificação".

Eu posso estar diante de uma situação em que o "cpython" não mescla meu PR antes do próximo lançamento. Caso isso aconteça, eu gostaria de usar, tanto quanto possível, git "merge" e / ou "pull" do meu PR aberto (também conhecido como bpo-XXXXX) em uma ramificação "AIX-release".

Os passos que eu vejo para isso seriam:

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"

Assim, para simplificar / verificar a mesclagem na nova versão, gostaria de saber e "armazenar" o bpo-XXXXX com a "sincronização" mais recente com as ramificações principal e / ou nomeada.

Estou ciente de que - quando se trata de git - eu sou um motorista de domingo. Pode ser óbvio para você. Mas acho que para muitos (pelo menos espero não estar só: sorria :) git não é direto no que faz o quê. Muito poderoso - sim - mas eu me sinto sobrecarregado por seu poder. Thx pela sua ajuda!

(FYI: última tentativa, nova falha - estou muito curioso sobre quais etapas específicas foram usadas para fazer o checkout, mesclar e empurrar - e fazer tudo funcionar? Você conseguiu meu bpo, empurrou isso e depois fundiu? depois, confirme (local) e, em seguida, pressione - ou use algum outro fluxo de trabalho. Provavelmente - o que estou procurando é o fluxo de trabalho que veio "naturalmente" para você.

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.
    
por Michael Felt 28.04.2018 / 21:38

2 respostas

0

Você pode querer experimentar git pull -r . Isso (tenta) adicionar alterações remotas "abaixo" de suas alterações locais, então você pode git push o resultado de volta.

    
por 17.05.2018 / 20:01
0

Como resposta - já que tenho algo funcionando para mim.

Primeiro de tudo - parece que estou seguindo o processo errado.

O processo que eu uso agora é: - startup -

  1. garfo de algum lugar
  2. clone meu fork "como origem"
  3. adicione "em algum lugar" como remote_origin

Esse diretório eu chamo de "mestre", por exemplo, cpython-master para meu fork cpython

A atividade 'somente' que eu faço com este diretório é "buscar e / ou puxar" do remote_origin e depois empurrar para "origem".

Isso estava funcionando antes - mas eu estava me perdendo quando fiz uma ramificação (que foi enviada como PR, mas não (ainda) mesclada em remote_origin) e queria atualizar esse PR para incluir as atualizações mais recentes.

Então, o que funciona agora?

  1. comece com um novo clone "do meu garfo!"
  2. mude para o ramo marcado que considero 'mais recente'
  3. puxe / busque minha ramificação anterior em uma nova ramificação
  4. faça tudo funcionar - talvez seja necessário enxaguar e repetir essa etapa
  5. escolha um nome de ramificação (talvez igual a um antigo, talvez novo)
  6. cometer localmente
  7. empurrar para o github

O que fez a diferença para mim não é tentar mesclar as atualizações de qualquer origem em minha ramificação 'existente', mas ir para a 'nova' tag remote_origins em um clone do meu fork e "puxar" minha solicitação pull nessa situação.

Embora eu não esteja absolutamente claro sobre por que isso funciona melhor - pelo menos eu não vejo:

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.
    
por 13.05.2018 / 13:01

Tags