Pergunta

Eu tenho que admitir que não brinquei com recursos avançados do GITS, mas no meu projeto atual que eu precisava.

A situação: alguém tentou implementar alguns recursos e os recolheu ao mestre, agora fui chamado para fazer o que essa outra pessoa tentou fazer (mas falhou), portanto, a primeira coisa que fiz foi

git checkout -b clean_start HASH

Hash é um hash sha1 correto de cerca de 20 compromissos antes do mestre atual e funcionou. Agora fiz algumas alterações nessa filial e agora estou em um ponto em que gostaria de alterar o atual ramo principal do repositório remoto (que tem as alterações feitas pela outra pessoa) para minha filial local.

Em outras palavras, eu gostaria de mover a cabeça do mestre 20 se compromete e depois fundir meu novo ramo limpo para ele.

É exatamente isso que eu tenho que fazer? Com a cabeça de reverter ~ 20 etc. ou existe um comando que faz com que exatamente essa cabeça se mova?

Foi útil?

Solução

Você pode fazer isso, se o repositório remoto aceitar empurrões forçados:

git push --force origin clean_start:master

Observe que se mais alguém tiver o repositório clonado, um empurrão deles poderia potencialmente desfazer isso. Se você deseja mesclar o ramo principal local e o ramo mestre remoto, mas mantenha a árvore de arquivos do seu ramo (descartando o mestre da árvore de origem), você pode fazê -lo assim:

git merge -s ours --no-commit origin/master
git commit  # Separate step so that you can use your own commit message.
git checkout master
git merge clean_start  # Fast-forward
git push origin master

Isso criará um comprometimento de mesclagem com as duas ramificações (o mestre e o mestre da origem) como pai, mas a árvore será idêntica à dica atual do ramo. Em outras palavras, ele criará uma mesclagem simbólica, onde não ocorrerá a fusão de código real.

Se você não se importa que outras pessoas que trabalham no repositório sejam interrompidas, poderá usar a primeira abordagem. Mas se você trabalha com outras pessoas que já têm essas confirmações, a segunda abordagem será mais à prova de idiotas e manterá o histórico.

Outras dicas

  1. Você pode apontar especificamente o mestre para onde deseja que esteja com:

    git update-ref refs/heads/master clean_start
    

    (se você está rastreando as novas mudanças em clean_start e quero mestre apontar lá)

    Cuidado com o qual qualquer que seja o mestre estava apontando (cerca de 20 compromissos) estarão "perdidos".

    Você precisará forçar o empurrão do mestre por causa disso:

    git push origin master -f
    
  2. Se você quiser deixar seu mestre local onde está e empurre a casa de Clean_Start para o mestre remoto, basta fazer isso:

    Git Push Origin Clean_start: Master -f

    espero que isto ajude.

    Ps. Corre gitk --all & Primeiro para que você possa ver o que está acontecendo visualmente ao fazer isso.

o Reset Git O comando existe para alterar o que a cabeça aponta.

No seu caso, você pode fazer isso:

git checkout master              # switch to the master branch
git reset --hard clean_start     # point HEAD to the clean_start branch
git push -f origin master:master # force push the new HEAD to server
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top