Mesclando garfos no GitHub

259

Garfoi um repositório GitHub. Então eu coloquei algumas alterações no meu garfo. Em seguida, o repositório original mesclou minhas alterações e outras. Agora, quero mesclar as alterações que estão faltando. Eu tentei um simples pull seguido de push, mas isso rende meus commits em duplicado. Qual é a melhor maneira de fazer isso?

R. Martinho Fernandes
fonte

Respostas:

352

Você provavelmente tem um "remoto" para cada repositório. Você precisa puxar de um controle remoto e empurrar para o outro.

Se você clonou originalmente no seu fork, esse controle remoto será chamado de "origem". Se você ainda não o adicionou, precisará adicionar o repositório da primeira pessoa como outro controle remoto:

git remote add firstrepo git://github.com/first/repo.git

Depois que tudo estiver configurado, você poderá realmente

git pull firstrepo master
git push origin

Lembre-se, git pullnada mais é do que uma macro que faz git fetche git merge, nessa ordem. Você só precisa buscar a lista de confirmações no repositório da primeira pessoa e depois mesclar o ramo delas na sua árvore. A fusão deve fazer a coisa certa com seus commits nos dois ramos.

O GitHub, em toda sua grandiosidade perpétua, fornece um atalho, é claro. Há um botão de "avanço rápido" em sua bifurcação do repositório que você pode usar para encontrar sua bifurcação se estiver totalmente fundido no outro lado.

Jim Puls
fonte
1
Existe uma maneira de fazer isso inteiramente com operações remotas? Se bem entendi, com esse método, você fará o download de todas as alterações no repositório local e, em seguida, carregará (enviará) todas de volta para a bifurcação no github. Prefiro, de alguma forma, puxar todas as alterações diretamente para o fork no github.
22711 Ken Liu
1
Não. O Git não suporta isso. Felizmente, o Github agora tem um botão de mesclagem na interface da web.
cweiske
13
@cweiske - onde fica esse botão Mesclar? Eu olhei por todas as páginas de administração e páginas principais, mas não consigo encontrá-lo :(.
Adam
2
@ Adam, está na página Pull Request. Portanto, o falsificador abriria uma solicitação de recebimento para mesclar um de seus ramos a um dos seus. Lá você pode clicar no botão mesclar.
Rob Barreca
2
O botão Avanço rápido não parece mais estar disponível. Para obter informações, usei outra URL git dentro do meu comando:git remote add snaury [email protected]:snaury/script-runner
olibre 5/12/13
72

Portanto, a resposta aceita acima não funcionou perfeitamente para mim. Nomeadamente, parecia perder o link para o autor original do github quando funcionava, e depois não parecia mais funcionar depois disso. Acho que o problema foi que a resposta deixou de fora o / entre o nome remoto e o ramo. Por isso, buscaria uma ramificação chamada master no controle remoto, mas não conseguiria fazer nada com ela. Não tenho muita certeza do porquê.

Aqui está a maneira como o github recomenda em seu site .

Depois de clonar seu repositório bifurcado, é necessário adicionar um controle remoto apontando para o original, como a resposta anterior disse. Eles gostam de chamá-lo a montante, mas isso não importa.

git remote add upstream git://github.com/octocat/Spoon-Knife.git

Então você busca

git fetch upstream

e você verá as versões disponíveis para mesclar

From git://github.com/octocat/Spoon-Knife.git
 * [new branch]      gh-pages   -> upstream/gh-pages
 * [new branch]      master     -> upstream/master

Então você só precisa escolher a ramificação na qual deseja mesclar. Lembre-se de que não são ramificações locais, elas são armazenadas em controles remotos. Mas, desde que você não tenha uma filial local chamada upstream / master (o que é permitido), você deve se unir bem à linha abaixo:

git merge upstream/master

Como alternativa, você pode atalho a busca / mesclagem (após a busca inicial pelo menos) com esta linha:

git pull upstream/master
Bob Spryn
fonte
O problema é que, se você já possui alterações, as alterações incorporadas criarão uma confirmação de mesclagem. Útil em alguns casos, mas na maioria das vezes um pouco inútil.
Pablo Olmos de Aguilera C.
1
Em aqueles casos de uso git rebaseque iria funcionar muito melhor, e deixar de fora aqueles commits mesclagem vazias feias
Fruch