Github adicionando um repositório como um fork de um clone existente

21

Então, eu tenho um repositório git que clonei de uma fonte upstream no ghithub. Fiz algumas alterações nele (que não foram confirmadas e no ramo mestre). O que eu quero fazer é enviar minhas alterações para a minha página do github como uma nova ramificação e fazer com que o github ainda a veja como um fork.

Isso é possível? Eu sou bastante novo no git e no github. Minha pergunta fez algum sentido?

A maneira mais fácil em que consigo pensar (que tenho certeza de que é a maneira mais abrangente) é forçar o repositório no github. Clone-o localmente em um diretório diferente. Adicione o repositório de origem upstream. Crie uma filial nesse novo repositório bifurcado. Copie minhas alterações de código manualmente para o novo repositório local. E, em seguida, empurre-o de volta para o meu github.

É um caso de uso comum que existe uma maneira mais simples de fazer isso sem duplicar diretórios?

Acho que estou perguntando aqui, em vez de SO, já que estou no linux usando a linha de comando git e as pessoas aqui dão melhores respostas imo =]

Falmarri
fonte
Eu acho que isso é tecnicamente sobre o tema, mas pode fazer melhor noutro local, uma vez que parece ser principalmente uma questão github
Michael Mrozek

Respostas:

22

Você pode fazer tudo isso no seu repositório existente (não é necessário clonar o fork em um novo repositório (local), criar sua ramificação, copiar suas confirmações / alterações, etc.).

  1. Prepare seus commits para serem publicados.

    Refine quaisquer confirmações locais existentes (por exemplo, com git commit --amende / ou git rebase --interactive).

    Confirme qualquer uma das alterações não confirmadas que você deseja publicar (não tenho certeza se você quis dizer que você tem alguns commit no seu mestre local e algumas alterações não confirmadas ou apenas algumas alterações não confirmadas; aliás, as alterações não confirmadas não estão “em um ramo ”, eles estão estritamente na sua árvore de trabalho).

    Renomeie sua ramificação principal para dar o nome desejado para sua "nova ramificação". Isso não é estritamente necessário (você pode enviar de qualquer ramo para outro ramo), mas provavelmente reduzirá a confusão a longo prazo se o ramo local e o ramo no fork do GitHub tiverem o mesmo nome.

    git branch -m master my-feature
    
  2. Bifurque o repositório GitHub upstream
    (por exemplo) github.com:UpstreamOwner/repostory_name.gitcomo
    (por exemplo) github.com:YourUser/repository_name.git.

    Isso é feito no site do GitHub (ou em um "cliente" que usa as APIs do GitHub); não há comandos locais do Git envolvidos.

  3. No seu repositório local (aquele que foi originalmente clonado a partir do repositório GitHub upstream e que possui suas alterações no mestre ), adicione seu repositório fork como um controle remoto:

    git remote add -f github github.com:YourUser/repository_name.git
    
  4. Envie sua ramificação para o repositório de bifurcações no GitHub.

    git push github my-feature
    
  5. Como opção, renomeie os controles remotos para que seu fork seja conhecido como "origem" e o upstream como "upstream".

    git remote rename origin upstream
    git remote rename github origin
    

    Um motivo para renomear os controles remotos seria porque você deseja usar git pushsem especificar um repositório (o padrão é "origem").

Chris Johnsen
fonte
Funcionou perfeitamente, mas quando você cria o github remoto Eu acho que você está perdendo o "https: //" no Github URL
jesjimher
1
@jesjimher: Os "URLs" deste post usam a "sintaxe semelhante ao scp" que usa o SSH, não o HTTP (S). Você também precisará alterar os dois pontos para uma barra para usá-los como URLs HTTP (S) (supondo que o servidor suporte ambos sem alterações adicionais no espaço para nome, o que o GitHub faz).
31816 Chris Johnsen
Opa, você está certo, Chris, eu digitei o cólon como uma barra e, portanto, não funcionou para mim, a menos que eu adicionasse "https". Desculpe pelo barulho ...
jesjimher
Na Etapa 4, o uso da -uopção pode fazer com que sua filial local my-feature rastreie a mesma filial remota origin/my-feature. O comando é:git push -u github my-feature
YaOzI
Isso é ótimo. A única coisa que tive que mudar foi o endereço do github!
Tico
0

Existe uma ferramenta: hub

hubé uma ferramenta de linha de comando que o agrupa gitpara estendê-lo com recursos e comandos extras que facilitam o trabalho com o GitHub

Agora você pode:

# cd to a cloned repo with uncommited changes
git checkout -b feature
git commit -am 'done with feature'
git fork
git push YOUR_USER feature
# git pull-request
Evgeny Vereshchagin
fonte