É possível comprometer-se e empurrar mudanças de um ramo para outro.
Suponha que eu cometi mudanças em BRANCH1 e quero empurrá-las para BRANCH2.
De BRANCH1, é válido para fazer:
git push origin **BRANCH2**
E depois reiniciar BRANCH1?
Isso quase vai funcionar.
Ao empurrar para um ramo não predefinido, você precisa especificar a referência de origem e a referência de destino:
git push origin branch1:branch2
Ou
git push <remote> <branch with new changes>:<branch you are pushing to>
Certamente, embora só funcione se ele'é um avanço rápido do BRANCH2 ou se você o forçar. A sintaxe correta para fazer uma coisa dessas é
git push <remote> <source branch>:<dest branch>
Veja a descrição de um "refspec" na página [git push man][1] para mais detalhes sobre o seu funcionamento. Note também que tanto um force push quanto um reset são operações que "reescreve o histórico", e não deve'ser tentado por um fraco de coração a menos que você'tenha certeza absoluta de que sabe o que você'está fazendo com relação a qualquer repositório remoto e outras pessoas que têm garfos/clones do mesmo projeto.
[1]: http://www.kernel.org/pub/software/scm/git/docs/git-push.html
It'é muito simples. Suponha que você tenha feito alterações na sua Filial A que reside tanto no local como remotamente, mas você quer empurrar essas alterações para a Filial B que não't existe em qualquer lugar.
Passo-01: Criar e mudar para a nova Filial B***
caixa de saída -b B
Passo-02: Adicionar mudanças na nova filial local
git add . //ou arquivo(s) específico(s)
Passo-03: Comprometa as mudanças
git commit -m "commit_message"
Step-04: Push changes to the new branch B. O comando abaixo irá criar um novo ramo B assim como remotamente
git push origem B
Agora, você pode verificar pelo bitbucket que o ramo B terá mais um compromisso do que o ramo A. E quando você vai verificar o ramo A estas mudanças ganharam'não estar lá pois estas foram empurradas para o ramo B.
Note: Se você cometeu suas mudanças no ramo A e depois disso você quer mudar essas mudanças para o novo ramo B então você terá que resetar essas mudanças primeiro.
No meu caso eu tinha um compromisso local, que era'não empurrado para o origin
master, mas comprometido com a minha filial local
master`.
Este commit local deveria agora ser empurrado para outra filial.
Com **Git Extensions*** você pode fazer algo como isto:
Você também pode fazer isso na **GIT linha de comando**. Exemplo copiado de [David Christensen*](https://www.endpoint.com/blog/2012/06/21/moving-commit-to-another-branch-in-git):
Acho que você'vai achar o
git cherry-pick
+git reset
um grandefluxo de trabalho mais rápido:
Usando o mesmo cenário, com " feature" sendo o ramo com o
a maior parte dos cometidos estão incorrectos, é'seria muito mais fácil de fazer isto:
git checkout master
"característica de escolha de cereja".
"função de checkout".
git reset --cabeça dura^
Economiza um pouco de trabalho, e é o cenário que
git cherry-pick
foi desenhado para lidar.
I'também notará que isto também funcionará se'não for o mais alto
comprometer-se; só precisas de um comunista para o argumento de escolher a cereja, via:
"git checkout master".
`git cherry-pick $sha1''.
"função de checkout".
"git rebase -i ...
whack the specific commit from the history`
Eu recebo um resultado ruim com o comando git push origin branch1:branch2
:
No meu caso, branch2
foi apagado e branch1
foi atualizado com as novas alterações.
Assim, se você quer que as alterações só empurrem o branch2
do branch1
, tente estes procedimentos:
No branch1
:
clique em .branch1
: add .``.
No branch1
:
git commit -m 'comments'
Em branch1
:
No 'branch2': "git pull origin branch1
No 'branch1': voltar ao compromisso anterior.
você pode fazer isso facilmente
git status
git add .
git commit -m "any commit"
git pull origin (branch name, master in my case)
git push origin current branch(master):branch 2(development)(in which you want to push changes)
Você se comprometeu com a BRANCH1 e quer se livrar desse compromisso sem perder as mudanças? **git reset*** é o que você precisa. Faça:
git branch BRANCH2
se você quer que o BRANCH2 seja uma nova filial. Você também pode fundir isto no final com outra filial, se quiser. Se o BRANCH2 já existe, então deixe esta etapa de fora.
Então deixe:
git reset --hard HEAD~3
se você quiser redefinir o compromisso no ramo que você se comprometeu. Isto leva as mudanças dos últimos três commits.
Então faz o seguinte para trazer os commits redefinidos para o BRANCH2
git checkout BRANCH2
Esta fonte foi útil: https://git-scm.com/docs/git-reset#git-reset-Undoacommitmakingitatopicbranch