Mesclando entre garfos no GitHub

Eu bifurquei um repository do GitHub. Então eu empurrei algumas mudanças para o meu garfo. Então o repository original fundiu minhas mudanças e algumas outras. Agora, quero mesclar as alterações que estão faltando. Eu tentei um simples puxão seguido de push, mas isso rendeu meus commits em duplicata. Qual é a melhor maneira de fazer isso?

Você provavelmente tem um “remote” para cada repository. Você precisa puxar do controle remoto e empurrar para o outro.

Se você clonou originalmente de seu fork, esse controle remoto será chamado de “origem”. Se você ainda não adicionou, você precisará adicionar o repository do primeiro cara como outro controle remoto:

git remote add firstguy git://github.com/firstguy/repo.git 

Depois que tudo estiver configurado, você deve realmente ser capaz de

 git pull firstguy master git push origin 

Lembre-se, git pull nada mais é do que uma macro que git fetch e git merge , nessa ordem. Você só precisa buscar a lista de commits do repository do primeiro cara e depois mesclar sua ramificação na sua tree. A fusão deve fazer a coisa certa com seus commits em ambos os ramos.

GitHub, em toda a sua grandiosidade perpétua, dá-lhe um atalho, é claro. Há um botão “avançar” na sua bifurcação do repository que você pode usar para pegar sua bifurcação se estiver totalmente integrado ao outro lado.

Então a resposta aceita acima não funcionou para mim perfeitamente. Ou seja, parecia perder o link para o autor original do github quando funcionava, e depois parecia não funcionar mais depois disso. Eu acho que o problema foi que a resposta deixou de fora o / entre o nome remoto e o ramo. Então, ele buscaria uma ramificação chamada master do controle remoto, mas não conseguiria fazer nada com ela. Não tenho certeza do porque.

Aqui está o caminho recomendado pelo github em seu site .

Depois de ter clonado seu repository bifurcado, você precisa 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 o ramo que você quer mesclar. Lembre-se que estes não são ramos locais, eles são armazenados em controles remotos. Mas desde que você não tenha uma filial local chamada upstream / master (que é permitida), você deve se fundir bem com a linha abaixo:

 git merge upstream/master 

Alternativamente, você poderia atalho o fetch / merge (após a busca inicial, pelo menos) com esta linha:

 git pull upstream/master