Esteja ciente de que você pode perder as alterações feitas na masterramificação (localmente, por causa do reset --hard, e no lado remoto, por causa do push --force).
Uma alternativa seria, se você deseja preservar seus commits master, repeti-los além dos atuais upstream/master.
Substitua a peça de reposição por a git rebase upstream/master. Você ainda precisará forçar o push.
Consulte também " O que devo fazer se estiver em uma situação ruim? "
Nota: especificamente no GitHub, agora (fevereiro de 2019) existe um atalho para excluir repositórios bifurcados para solicitações pull que foram mescladas a montante.
oi, funcionou muito bem! btw a sintaxe de reset correta égit reset --hard upstream/master
tampe125
11
@ tampe125 Excelente. Corrigi a sintaxe de git resetna resposta.
VonC 11/03/12
fatal: 'a montante' não parece ser um repositório git
Benubird
@Benubird que é o nome do controle remoto que faz referência ao repositório original (o que você bifurcou): veja o gráfico e os git remotecomandos " " em stackoverflow.com/a/3903835/6309 .
VonC 13/08/14
Certo, mas não está claro em sua pergunta como configurá-lo, já que por padrão 'upstream' não está definido na linha de comando, como eu peguei no github.
Benubird
31
Amo a resposta do VonC. Aqui está uma versão fácil para iniciantes.
Existe um git remote chamado do originqual tenho certeza de que todos conhecem. Basicamente, você pode adicionar quantos controles remotos forem necessários em um repositório Git. Então, o que podemos fazer é introduzir um novo controle remoto, que é o repositório original e não o garfo. Eu gosto de chamaroriginal
Vamos adicionar repositórios originais ao nosso fork como um controle remoto.
git remote add original https://git-repo/original/original.git
Agora, vamos buscar o repositório original para garantir que tenhamos o código mais recente
git fetch original
Como sugeriu VonC, verifique se estamos no mestre.
git checkout master
Agora, para atualizar nossa bifurcação com o código mais recente no repositório original, tudo o que precisamos fazer é redefinir com força nossa ramificação principal de acordo com o controle remoto original.
Estou fatal: ambiguous argument 'original/master': unknown revision or path not in the working tree.no passo final. Algum conselho?
TomNorway
Parece que isso deixa o estoque na filial remota original. Suponho que esteja faltando uma etapa para redefinir o seu garfo de volta ao controle remoto correto?
precisa saber é o seguinte
11
originalé melhor do que upstream(usado pelos documentos do Github), assim como origin/master"upstream" do local master. Reduz a ambiguidade. Gostaria de saber se é por isso que você o usa?
55568
11
É exatamente por isso que eu uso!
Ahmad Awais
2
Segui estas instruções e agora o status git diz: No mestre de ramificação Seu ramo e 'origem / mestre' divergiram e têm 52 e 5 confirmações diferentes cada, respectivamente. (use "git pull" para mesclar a ramificação remota na sua) - mas eu quero descartar meus 5 commits. Qual é o próximo passo?
user3562927
6
Seguindo a @VonC ótima resposta. A política da sua empresa GitHub pode não permitir 'forçar push' no mestre.
remote: error: GH003: Sorry, force-pushing to master is not allowed.
Se você receber uma mensagem de erro como esta, tente as seguintes etapas.
Para redefinir efetivamente seu fork, você precisa seguir estas etapas:
Abra seu fork no GitHub, em "Configurações -> Ramos -> Ramificação padrão", escolha 'new_master' como o novo ramificação padrão. Agora você pode forçar push no ramo 'master':
git checkout master
git push --force origin
Então você deve definir 'master' como o ramo padrão nas configurações do GitHub. Para excluir 'tmp_master':
(Nem todo mundo gosta de fazer coisas através da interface de linha de comando git)
Depois de configurado, você só precisará executar as etapas de 7 a 13 a partir de então.
Buscar> ramo principal do checkout> redefinir para o principal> Enviar alterações ao servidor
Passos
Na barra de ferramentas do menu, na parte superior da tela: "Repositório"> "Configurações do repositório"
"Adicionar"
Volte ao GitHub e copie o URL do clone.
Cole o URL no campo "URL / Caminho" e dê um nome que faça sentido. Eu chamei de "mestre". Não marque a caixa de seleção "Controle remoto padrão" . Você não poderá enviar diretamente para este repositório.
Pressione "OK" e você deverá vê-lo na sua lista de repositórios agora.
Pressione "OK" novamente e você deverá vê-lo na sua lista de "Remotos".
Clique no botão "Buscar" (canto superior esquerdo da área de cabeçalho da árvore de origem)
Verifique se a caixa de seleção "Buscar todos os controles remotos" está marcada e pressione "ok"
Clique duas vezes na sua ramificação "master" para verificá-la, caso ainda não esteja registrada.
Encontre o commit que você deseja redefinir, se você chamou o repositório "master", provavelmente encontrará o commit com a tag "master / master".
Clique com o botão direito do mouse em commit> "Redefinir ramificação atual para este commit".
Na caixa de diálogo, defina o campo "Modo de uso:" como "Descartar todas as alterações na cópia de trabalho" e pressione "OK" (certifique-se de colocar as alterações que não deseja perder em uma ramificação separada primeiro).
Clique no botão "Push" (canto superior esquerdo da área do cabeçalho da árvore de origem) para fazer o upload das alterações na sua cópia do repositório.
Respostas:
A solução mais simples seria (usar '
upstream
' como o nome remoto referenciando o repositório original bifurcado):(Semelhante a esta página do GitHub, seção "O que devo fazer se estiver em uma situação ruim?" )
Esteja ciente de que você pode perder as alterações feitas na
master
ramificação (localmente, por causa doreset --hard
, e no lado remoto, por causa dopush --force
).Uma alternativa seria, se você deseja preservar seus commits
master
, repeti-los além dos atuaisupstream/master
.Substitua a peça de reposição por a
git rebase upstream/master
. Você ainda precisará forçar o push.Consulte também " O que devo fazer se estiver em uma situação ruim? "
Uma solução mais completa, fazendo backup do seu trabalho atual (apenas no caso), está detalhada em " Limpeza da ramificação mestre do git e mova algumas confirmações para a nova ramificação ".
Veja também " Puxe novas atualizações do repositório original do GitHub para o repositório bifurcado do GitHub " para ilustrar o que é "
upstream
".Nota: repositórios recentes do GitHub protegem o
master
ramo contrapush --force
.Portanto, você terá que se proteger
master
primeiro (veja a figura abaixo) e depois protegê-lo depois de pressionar com força .Nota: especificamente no GitHub, agora (fevereiro de 2019) existe um atalho para excluir repositórios bifurcados para solicitações pull que foram mescladas a montante.
fonte
git reset --hard upstream/master
git reset
na resposta.git remote
comandos " " em stackoverflow.com/a/3903835/6309 .Amo a resposta do VonC. Aqui está uma versão fácil para iniciantes.
Existe um git remote chamado do
origin
qual tenho certeza de que todos conhecem. Basicamente, você pode adicionar quantos controles remotos forem necessários em um repositório Git. Então, o que podemos fazer é introduzir um novo controle remoto, que é o repositório original e não o garfo. Eu gosto de chamaroriginal
Vamos adicionar repositórios originais ao nosso fork como um controle remoto.
Agora, vamos buscar o repositório original para garantir que tenhamos o código mais recente
Como sugeriu VonC, verifique se estamos no mestre.
Agora, para atualizar nossa bifurcação com o código mais recente no repositório original, tudo o que precisamos fazer é redefinir com força nossa ramificação principal de acordo com o controle remoto original.
E você está pronto :)
fonte
fatal: ambiguous argument 'original/master': unknown revision or path not in the working tree.
no passo final. Algum conselho?original
é melhor do queupstream
(usado pelos documentos do Github), assim comoorigin/master
"upstream" do localmaster
. Reduz a ambiguidade. Gostaria de saber se é por isso que você o usa?Seguindo a @VonC ótima resposta. A política da sua empresa GitHub pode não permitir 'forçar push' no mestre.
remote: error: GH003: Sorry, force-pushing to master is not allowed.
Se você receber uma mensagem de erro como esta, tente as seguintes etapas.
Para redefinir efetivamente seu fork, você precisa seguir estas etapas:
Abra seu fork no GitHub, em "Configurações -> Ramos -> Ramificação padrão", escolha 'new_master' como o novo ramificação padrão. Agora você pode forçar push no ramo 'master':
Então você deve definir 'master' como o ramo padrão nas configurações do GitHub. Para excluir 'tmp_master':
Outras respostas que avisam sobre a perda de sua alteração ainda se aplicam, seja cuidadoso.
fonte
Como fazer isso 100% através da GUI do Sourcetree
(Nem todo mundo gosta de fazer coisas através da interface de linha de comando git)
Passos
Clique duas vezes na sua ramificação "master" para verificá-la, caso ainda não esteja registrada.
Encontre o commit que você deseja redefinir, se você chamou o repositório "master", provavelmente encontrará o commit com a tag "master / master".
Clique com o botão direito do mouse em commit> "Redefinir ramificação atual para este commit".
Na caixa de diálogo, defina o campo "Modo de uso:" como "Descartar todas as alterações na cópia de trabalho" e pressione "OK" (certifique-se de colocar as alterações que não deseja perder em uma ramificação separada primeiro).
Seu Feito!
fonte