git: mesclar alterações do repo principal em code.google.com

1

Digamos que criei um clone link de link usando a interface da web em code.google.com

Desde o momento em que criei meu clone, houve alterações feitas no link e gostaria de mesclá-lo ao meu clone, preferencialmente preservando o histórico (isto é, eu poderia mesclá-los manualmente usando uma ferramenta diff / merge, mas isso não preserva o histórico do git).

Quais são os comandos mágicos para realizar essa mesclagem?

De preferência, forneça os comandos completos. Eu imagino que isso envolverá alguma combinação de git fetch e git merge e remote-tracking branches etc. Meu problema não é que eu não possa ler man pages para git fetch ou merge, eu simplesmente não os entendo.

Atualização:

Dado o comentário de Lazy Badger abaixo, resolvi metade do problema:

git remote add original https://code.google.com/p/leveldb/

Cria algo chamado 'original' apontando para a fonte. Eu posso então fazer:

git pull original master

Que busca e mescla as alterações do original para o meu mestre de filial. No entanto, eu faria isso em duas etapas separadas: como git fetch e git merge $ something para mesclar em minha ramificação atual.

No entanto, depois do git fetch original, não sei o que seria $ something. Quando eu faço git branch -a, eu não vejo nada relacionado ao meu thingy original remoto.

O que complica as coisas é que existem 3 filiais no original também.

Então, onde os dados buscados do go original e como devo me referir a ele no meu git merge $ something?

    
por Krzysztof Kowalczyk 06.10.2011 / 03:47

2 respostas

2

Você já encontrou como adicionar outro controle remoto e extrair diretamente dele:

git remote add original https://code.google.com/p/leveldb/
git pull original master

Se você quiser fazer a busca e mesclar separadamente (em vez de um único comando pull; talvez porque você queira inspecionar o que mudou antes de mesclá-lo), então você pode fazer assim:

git fetch original         # update refs/remotes/original/*
git merge original/master  # merge refs/remotes/original/master

Você pode inspecionar as alterações antes de se fundir com este comando:

git log --reverse -p original/master@{1}..original/master@{0}

Em vez de usar a especificação de revisão baseada em reflog acima, você também pode simplesmente copiar e colar a especificação de revisão oldhash..newhash que foi produzida durante a busca.

Tecnicamente, git pull remote branch está mais perto deste par de comandos:

git fetch remote-or-url branch  # grab remote branch and put it in FETCH_HEAD
git merge FETCH_HEAD            # merge it

mas esse par (e, portanto, também o uso de um controle remoto e um ramo especificados) geralmente não é tão bom, pois não atualiza os ramos de rastreamento remoto ( refs/remotes/original/* ). As invocações remotas + de ramificação de busca e extração são úteis para fusões únicas de repositórios para os quais você não deseja manter um conjunto completo de ramificações de rastreamento remoto (ou seja, buscar / extrair uma solicitação de mesclagem de um colaborador menor / raro) .

    
por 06.10.2011 / 10:02
0

Você pode adicionar vários controles remotos a um único repositório. Depois de ter o segundo controle remoto, você pode simplesmente empurrar as alterações do primeiro para o segundo. Por exemplo:

git clone <google_URI>
cd <projdir>
git remote add github <github_URI>
git push github master
    
por 06.10.2011 / 09:25

Tags