Como ressincronizar um garfo do original


33

Acabei de criar um projeto no Github. Fiz modificações e enviei uma solicitação de recebimento. O proprietário fundiu meu garfo com o projeto principal e depois disso ele fez algumas modificações. Então, por enquanto, meu fork não é atualizado com o projeto principal. Sinto falta das modificações que ele fez depois de mesclar minha solicitação de recebimento. Como posso atualizar meu fork com o projeto Main? Existe uma maneira de fazer isso na interface da web?

obrigado


Eu escrevo uma instrução simples. verifique aqui: webapps.stackexchange.com/a/58140/63016
Youngjae

2
Há agora um doc oficial que é bem feito: help.github.com/articles/syncing-a-fork
Andre Miras

Respostas:


36

Por design, bifurcar um projeto cria um repositório separado que não é atualizado quando o repositório original é alterado. No entanto, gitfacilita bastante a atualização manual.

Você precisa da ajuda de um terceiro repositório (sua cópia local é suficiente). Existem 3 repositórios:

  • "Upstream": o repositório do projeto upstream no Github.
  • "Origem": o repositório do seu fork no Github
  • "Local": o seu repositório local no seu computador. Assumirei que você o criou clonando Fork usando git clone git@github.com:your-username/projectname.gite que todos estão usando o branch master.

Supondo que atualmente "Origem" e "Local" estejam no mesmo estado, e "Upstream" esteja à frente em 1 ou mais confirmações (a mesclagem e quaisquer alterações subseqüentes).

Primeiro adicione o projeto upstream como um remoto Git :

git remote add upstream https://github.com/upstream-username/projectname.git

Em seguida, puxe (ou seja, busque e mescle automaticamente) as alterações da masterramificação do controle remoto na ramificação atual ( master) do seu repositório local :

git pull upstream master

Agora seu repositório local está sincronizado com upstream. Por fim, envie seu repositório local ao seu fork do Github:

git push origin master

Agora tudo está sincronizado.


2
Muito obrigado .. é uma pena que isso pode não ser possível fazer isso na interface web ..
Ban

1
Isso é realmente possível na interface da web: webapps.stackexchange.com/a/31010/10390 #
thSoft

Yeehaw! Eu estava arrancando meus cabelos tentando encontrar essa informação explícita. Obrigado por compartilhar!
precisa

... mas por favor tome também um olhar para os comentários da resposta, provando que Resync via web não é a melhor opção, pois polui repositório
ΕΨΗΕΛΩΝ usr-local-

o que você faz quando diz "já atualizado" após a atração, mas obviamente não está? (existem arquivos que mudaram tudo em um subdiretório, e eu não devem ter diferenças de qualquer outro arquivo, mas eu faço)
roberto Tomas

1

Você precisa adicionar um controle remoto (consulte a ajuda do GitHub ) e extrair desse novo controle remoto.

git remote add mainProject https://github.com/user/mainProject
git pull mainProject master

0

Encontrei esta resposta para complementar a resposta original, uma vez que trata apenas da sincronização de um ramo (mestre). Além disso, se a ramificação foi criada no upstream desde o seu fork, é um pouco mais complicado criá-lo no fork.

A resposta curta é: para atualizar seu fork com cada ramificação no repositório upstream, execute este comando.

for branch in $(git ls-remote --heads upstream|sed 's#^.*refs/heads/##'); do git push origin refs/remotes/upstream/$branch:refs/heads/$branch; done

O que isso não faz é remover quaisquer ramificações do seu fork que foram excluídas do upstream. Não há como automatizar isso, especialmente se você criou ramificações no seu garfo.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.