Eu tenho dois ramos, mestre e desenvolvedor. Eu sempre trabalho no dev e só verifico o código no ramo mestre depois que ele é aprovado para uso em produção. Quando faço isso, tenho que fazer o seguinte:
git checkout master
git merge dev
git checkout dev
Isso é muito detalhado e, como faço isso com frequência, gostaria de minimizá-lo. Existe algum comando git que eu possa usar para mesclar do meu dev de ramificação atual para o outro mestre de ramificação sem precisar fazer check-out da ramificação mestre primeiro? Algo como:
git merge dev to master
seria fantástico. Examinei a documentação do git e não vi nada.
git
version-control
Chris
fonte
fonte
git stash
,git checkout master
,git merge dev
,git checkout dev
,git stash pop
.Respostas:
1. Adicione um alias remoto ao seu repositório local, por exemplo:
(Ou no Windows
git remote add self C:\path\to\your\repository
)2. Pressione para o controle remoto, ex:
fonte
/path/to/your/repository
é o caminho para a sua árvore de trabalho, ou seja, não inclua o.git
diretório. Além disso, isso deve ser desnecessário: o controle remoto terá que ser atualizado se você mover o repositório.git remote add self file:///c/projects
apenas volta com as notas de usodev
) e depois enviar o commit de mesclagem usandogit push self dev:master
..
funcionou bem para mim:git push . head:master
.A atual resposta mais votada por @zerome é boa, mas é um pouco desnecessária.
Na base do seu repositório git, você pode fazer o seguinte:
git push . dev:master
Uma solução mais generalizada que funcionaria em qualquer lugar da árvore seria:
fonte
git push . dev:master
simplificou muito a minha vida! Melhor resposta, de longe, muito obrigadogit push origin dev:master
merge --no-ff
comportamento com isso?git remote add self file:///myRepo
?Sua melhor aposta seria usar apenas um alias, colocado no seu gitconfig global (
~/.gitconfig
):para que você possa invocá-lo de qualquer repositório como
fonte
&&
, não;
, falharia na fusão, e não tente voltar. Esperamos que o usuário seja inteligente o suficiente para ver a mensagem "falha na fusão" e lidar com ela.merge-to = "!f() { export tmp_branch=
ramo git | grep '*' | tr -d '*'; git checkout $1 && echo git merge $tmp_branch && echo git checkout $tmp_branch; unset $tmp_branch; }; f"
, que vamos me não precisa digitar no ramo Eu estou atualmente em, por isso, se eu quero mesclardev
emmaster
e eu estou nodev
agora eu basta digitargit merge-to master
merge-to = "!f() { export tmp_branch=`git branch | grep '* ' | tr -d '* '`; git checkout $1 && git merge $tmp_branch && git checkout $tmp_branch; unset $tmp_branch; }; f"
git branch | grep '* ' | tr -d '* '
; git checkout $ 1 && git merge --no-ff $ tmp_branch && git checkout $ tmp_branch; tmp_branch unset;}; f"Uma pequena modificação do alias do Jefromi que não exige que você digite o ramo atual.
Então você usá-lo como:
git merge-to dev
.Isso mudará para o
dev
ramo, mesclará com CURRENT e depois retornará.Por exemplo, supondo que você esteja no
master
ramo, ele mesclará o mestre no dev e você ainda estará no mestre.Definitivamente vai para os meus dotfiles :)
fonte
Isso é velho, mas ...
Combinando as soluções de @ kevin-lyda e @ dmytrii-nagirniak acima. esse alias mescla a ramificação atual na ramificação especificada. Ele usa o método remotes com e usa comandos git para obter o contexto.
Para ser usado como:
fonte
Para mesclar a ramificação atual em outra ramificação sem fazer check-out da outra ramificação:
Mesclagem de avanço rápido
Isso é realmente fácil. Por definição, uma mesclagem de avanço rápido significa simplesmente que o ponteiro da ramificação é movido adiante na árvore de confirmação. Então, tudo que você precisa fazer é simular isso:
Dica: Se você fez um
git fetch
e tem novas confirmaçõesorigin/master
, pode mover amaster
ramificação sem fazer check-out usando:Mesclar via consolidação de mesclagem
Isto nem sempre é possível. Para criar uma consolidação de mesclagem, você deve executar uma operação de mesclagem. E para fazer uma operação de mesclagem, você deve ter confirmações na outra ramificação que não está na ramificação atual.
Se você possui confirmações na
master
ramificação que não estão nadev
ramificação, é possível:Explicação:
Entre
master
na ramificação temporária e inicie o editor de mensagens de confirmação. Se você deseja que o commit de mesclagem pareça ter mesclado odev
ramomaster
, edite-o a partir deste:para isso:
Dica: você pode usar em
-m "Merge branch 'dev'"
vez de-e
ser mais rápido.master
ponteiro da ramificação para apontar para a consolidação de mesclagem.dev
ramo.Isso ainda toca sua árvore de trabalho, mas minimamente. Ele não reverte a árvore até o estado original,
master
apenas para trazer as mudanças de desenvolvimento mais uma vez. Alguns podem não se importar, mas para outros, pode ser importante.fonte
Muitas vezes você vem do ramo em que gostaria de mesclar o ramo atual. Nesse caso, você poderia fazer:
git co - && git merge @{-1}
por exemplo:
fonte
Minha solução é semelhante às outras respostas, com as seguintes diferenças:
set -ex
para que cada comando seja impresso e, se o comando falhar, a função sai imediatamentegit merge
: git merge
que garante que a conclusão da guia funcione com algumas configurações do shell (por exemplo,gitfast
de oh-my-zsh)fonte