Recentemente, bifurquei um projeto e apliquei várias correções. Em seguida, criei uma solicitação de recebimento que foi aceita.
Alguns dias depois, outra alteração foi feita por outro colaborador. Portanto, meu garfo não contém essa alteração.
Como posso colocar essa alteração no meu garfo? Preciso excluir e recriar meu fork quando tiver mais alterações para contribuir? Ou existe um botão de atualização?
git
github
pull-request
git-fork
Lea Hayes
fonte
fonte
Respostas:
No seu clone local do seu repositório bifurcado, você pode adicionar o repositório original do GitHub como um "remoto". ("Remotes" são como apelidos para os URLs dos repositórios -
origin
é um, por exemplo.) Em seguida, você pode buscar todas as ramificações desse repositório upstream e refazer o trabalho para continuar trabalhando na versão upstream. Em termos de comandos que podem se parecer com:Se você não deseja reescrever o histórico de sua ramificação principal (por exemplo, porque outras pessoas podem ter clonado), substitua o último comando por
git merge upstream/master
. No entanto, para fazer solicitações de recebimento mais limpas possível, provavelmente é melhor refazer a recuperação.Se você reformulou sua ramificação,
upstream/master
pode ser necessário forçar o envio para enviá-lo para o seu próprio repositório bifurcado no GitHub. Você faria isso com:Você só precisa usar
-f
a primeira vez depois de ter refeito.fonte
-f
que atrapalha todo mundo que poderia ter clonado sua versão.git merge --no-ff upstream/master
Dessa forma, seus commits não estão mais no topo.A partir de maio de 2014, é possível atualizar um fork diretamente do GitHub. Isso ainda funciona em setembro de 2017, mas levará a um histórico de confirmação sujo.
Update from original
).Agora você tem três opções, mas cada uma delas levará a um histórico de confirmação menos que limpo.
This branch is X commits ahead, Y commits behind <original fork>
.Portanto, sim, você pode manter seu repo atualizado com o upstream usando a interface da web do GitHub, mas isso prejudicará seu histórico de consolidação. Atenha-se à linha de comando - é fácil.
fonte
Aqui está o documento oficial do GitHub sobre Sincronizando um fork :
fonte
git push origin master
--follow-tags
: stackoverflow.com/a/26438076/667847git merge upstream/master
, então confira a desenvolver ramo e fazergit merge upstream/develop
Permission denied (publickey). fatal: Could not read from remote repository.
ao tentar buscar na conta Github do Facebook a montante.Muitas respostas acabam movendo seu fork um commit à frente do repositório pai. Esta resposta resume as etapas encontradas aqui, que moverão seu fork para o mesmo commit que o pai .
Mude o diretório para o seu repositório local.
git checkout master
Adicione o pai como um repositório remoto,
git remote add upstream <repo-location>
git fetch upstream
Questão
git rebase upstream/master
git status
Questão
git push origin master
Para mais informações sobre estes comandos, consulte o passo 3 .
fonte
Se, como eu, você nunca comprometer nada diretamente com o mestre , o que realmente deveria, pode fazer o seguinte.
No clone local do seu fork, crie seu controle remoto upstream. Você só precisa fazer isso uma vez:
Então, sempre que você quiser acompanhar a ramificação principal do repositório upstream, precisará:
Supondo que você nunca tenha cometido nada a seu respeito, você já deve ter feito isso. Agora você pode enviar seu mestre local para o seu fork remoto do GitHub de origem. Você também pode refazer sua ramificação de desenvolvimento em seu mestre local agora atualizado.
Após a configuração inicial do upstream e a verificação do master, tudo o que você precisa fazer é executar o seguinte comando para sincronizar seu master com o upstream: git pull upstream master .
fonte
Prefácio: sua bifurcação é a "origem" e o repositório de onde você partiu é o "upstream".
Vamos supor que você já clonou seu fork no computador com um comando como este:
Se isso for fornecido, você precisará continuar nesta ordem:
Adicione o "upstream" ao seu repositório clonado ("origem"):
Busque as confirmações (e ramificações) no "upstream":
Mude para o ramo "principal" do seu fork ("origem"):
Esconda as alterações do seu ramo "mestre":
Mesclar as alterações do ramo "mestre" do "upstream" no ramo "mestre" da sua "origem":
Resolver conflitos de mesclagem, se houver, e confirmar sua mesclagem
Coloque as alterações no garfo
Volte suas alterações ocultas (se houver)
Você Terminou! Parabéns!
O GitHub também fornece instruções para este tópico: Sincronizando um fork
fonte
git remote add upstream [email protected]:original_author/project_name.git
apenas um apelido paragit remote add upstream https://github.com/original_author/project_name.git
?git stash
egit stash pop
parte muito útilDesde novembro de 2013, foi aberto um pedido não oficial de recursos com o GitHub para solicitar que eles adicionassem um método muito simples e intuitivo para manter uma bifurcação local sincronizada com o upstream:
https://github.com/isaacs/github/issues/121
Nota: Como a solicitação de recurso não é oficial, também é recomendável entrar
[email protected]
em contato para adicionar seu suporte para que um recurso como esse seja implementado. A solicitação não oficial de recurso acima pode ser usada como evidência da quantidade de interesse nisso sendo implementada.fonte
Na data desta resposta, o GitHub não possui ( ou devo dizer não? ) Esse recurso na interface da web. Você pode, no entanto, pedir
[email protected]
para adicionar seu voto para isso.Enquanto isso, o usuário do GitHub bardiharborow criou uma ferramenta para fazer exatamente isso: https://upriver.github.io/
A fonte está aqui: https://github.com/upriver/upriver.github.io
fonte
Se você estiver usando o GitHub para Windows ou Mac, agora eles têm um recurso de um clique para atualizar os garfos:
fonte
Na verdade, é possível criar uma ramificação no seu fork a partir de qualquer confirmação do upstream no navegador:
https://github.com/<repo>/commits/<hash>
, em que o repositório é sua bifurcação e o hash é um hash de confirmação completo, que você pode encontrar na interface da Web upstream. Por exemplo, eu posso abrir https://github.com/max630/linux/commits/0aa0313f9d576affd7747cc3f179feb097d28990 , que apontalinux
master
como hora da escrita.Você pode buscar esse ramo no seu clone local e não precisará enviar todos esses dados de volta ao GitHub quando enviar edições por cima desse commit. Ou use a interface da web para alterar algo nesse ramo.
Como funciona (é um palpite, não sei exatamente como o GitHub faz isso): os garfos compartilham o armazenamento de objetos e usam espaços de nome para separar as referências dos usuários. Assim, você pode acessar todos os commits através do seu fork, mesmo que eles não existissem no momento da bifurcação.
fonte
Siga os passos abaixo. Eu tentei e isso me ajudou.
Finalizar compra na sua filial
Puxe a ramificação do repositório de origem para obter o código mais recente
fonte
git push HttpsForYourForkOfTheRepo BRANCH_NAME
Eu atualizo meus repositórios bifurcados com esta linha:
Use isso se não desejar adicionar outro ponto de extremidade remoto ao seu projeto, como outras soluções postadas aqui.
fonte
pull
.Como complemento para esta resposta, eu estava procurando uma maneira de atualizar todos os ramos remotos do meu repositório clonado ( origem ) a partir dos ramos upstream de uma só vez. Foi assim que eu fiz.
Isso pressupõe que você já configurou um apontador remoto upstream no repositório de origem (de onde a origem foi bifurcada) e o sincronizou
git fetch upstream
.Então corra:
A primeira parte deste comando lista todas as cabeças no repositório remoto upstream e remove o SHA-1 seguido pelo
refs/heads/
prefixo do nome da ramificação.Em seguida, para cada uma dessas ramificações, ele envia a cópia local da ramificação de rastreamento remoto upstream (
refs/remotes/upstream/<branch>
no lado local) diretamente para a ramificação remota na origem (refs/heads/<branch>
no lado remoto).Qualquer um desses comandos de sincronização de ramificação pode falhar por um de dois motivos: a ramificação upstream foi reescrita ou você enviou as confirmações nessa ramificação para o seu fork. No primeiro caso em que você não comprometeu nada com o ramo no garfo, é seguro pressionar com força (adicione a opção -f ; ou seja,
git push -f
no comando acima). No outro caso, isso é normal, pois sua ramificação de bifurcação divergiu e você não pode esperar que o comando sync funcione até que suas confirmações tenham sido mescladas novamente no upstream .fonte
O aplicativo "Pull" é uma solução de configuração e esquecimento automática. Ele sincronizará a ramificação padrão do seu fork com o repositório upstream.
Visite o URL, clique no botão verde "Instalar" e selecione os repositórios em que deseja ativar a sincronização automática.
A ramificação é atualizada uma vez por hora diretamente no GitHub, na sua máquina local, você precisa puxar a ramificação principal para garantir que sua cópia local esteja sincronizada.
fonte
mergemethod
. Mais sobre isso aquiO Android Studio agora aprendeu a trabalhar com os repositórios de bifurcações do GitHub (você nem precisa adicionar repositório remoto "upstream" pelo comando do console).
Abrir menu VCS → Git
E preste atenção nos dois últimos itens do menu pop-up:
Rebase my fork GitHub
Criar solicitação de recebimento
Tente eles. Eu uso o primeiro para sincronizar meu repositório local. De qualquer forma, as ramificações do repositório remoto pai ("upstream") ficarão acessíveis no Android Studio depois que você clicar em "Rebase my fork do GitHub" e poderá operar com elas facilmente.
(Eu uso o Android Studio 3.0 com os plugins "integração Git" e "GitHub".)
fonte
Quando você clonou seu repositório bifurcado, vá para o caminho do diretório em que seu clone reside e as poucas linhas no seu Git Bash Terminal.
E aí você está pronto para ir. Todas as alterações atualizadas no repositório principal serão enviadas para o repositório do fork.
O comando "buscar" é indispensável para manter-se atualizado em um projeto: somente ao executar uma "busca por git" você será informado sobre as alterações que seus colegas fizeram no servidor remoto.
Você ainda pode visitar aqui para mais consultas
fonte
Se você configurar seu upstream. Verifique com
git remote -v
, então isso será suficiente.fonte
Isso depende do tamanho do seu repositório e de como você o bifurcou.
Se é um repositório bastante grande, você pode querer gerenciá-lo de uma maneira especial (por exemplo, histórico de descargas). Basicamente, você pode obter diferenças entre as versões atual e upstream, enviá-las e depois voltar ao master.
Tente ler este . Ele descreve como lidar com grandes repositórios Git e como atualizá-los com as alterações mais recentes.
fonte
Gostaria de adicionar uma resposta à @ krlmlr .
Inicialmente, o repositório bifurcada tem uma filial chamada:
master
. Se você estiver trabalhando em um novo recurso ou correção, geralmente criará uma nova ramificaçãofeature
e fará as alterações.Se você deseja que o repositório bifurcado esteja sincronizado com o repositório pai, você pode configurar um arquivo de configuração (
pull.yml
) para o aplicativo Pull ( na ramificação do recurso ), assim:Isso mantém a
master
ramificação do repositório bifurcado atualizada com o repositório pai. Ele mantém afeature
ramificação do repositório bifurcado atualizada por meio damaster
ramificação do repositório bifurcado, mesclando o mesmo. Isso pressupõe que afeature
ramificação é a ramificação padrão que contém o arquivo de configuração.Aqui
mergemethods
estão dois em jogo, um é ohardreset
que ajuda a forçar alterações de sincronização namaster
ramificação do repositório bifurcado com o repositório pai e o outro métodomerge
. Este método é usado para mesclar as alterações feitas por você nafeature
ramificação e as alterações causadas pela força da sincronização namaster
ramificação. Em caso de conflito de mesclagem, o aplicativo pull permitirá que você escolha o próximo curso de ação durante a solicitação de pull.Você pode ler sobre configurações básicas e avançadas e várias
mergemethods
aqui .Atualmente, estou usando essa configuração no meu repositório bifurcado aqui para garantir que um aprimoramento solicitado aqui permaneça atualizado.
fonte
Há duas coisas principais em manter um repositório bifurcado sempre atualizado para sempre.
Portanto, quando sua solicitação de recebimento for aceita, você poderá excluir com segurança a ramificação, pois seu código contribuído ficará no mestre de seu repositório bifurcado quando você a atualizar com o upstream. Por isso, seu mestre estará sempre em boas condições para criar uma nova ramificação para fazer outra alteração.
Isso pode ser feito com o cron . Aqui está um exemplo de código, se você o faz no linux.
coloque esse código em
crontab file
para executar o trabalho a cada hora.crie o
cron.sh
arquivo de script e uma interação git com o ssh-agent e / ou espere como abaixoVerifique seu repositório bifurcado. Periodicamente, sempre mostrará esta notificação:
fonte
Use estes comandos (no caso de sorte)
fonte