Faça o Git Master Head Point para o Chefe de Filial atual
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?
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
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
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