EDITAR:
A minha resposta abaixo documenta uma maneira de mesclar master
em aq
, onde se você ver os detalhes da fusão que lista as alterações feitas em aq
antes da fusão, não as alterações feitas no master
. Eu percebi que isso provavelmente não é o que você quer, mesmo que você pense que é!
Somente:
git checkout aq
git merge master
está bem.
Sim, essa mesclagem simples mostrará que as alterações de master
foram feitas aq
nesse ponto, e não o contrário; mas tudo bem - já que foi isso que aconteceu! Posteriormente, quando você finalmente mesclar sua ramificação master
, é quando uma mesclagem finalmente mostrará todas as alterações feitas master
(o que é exatamente o que você deseja e é o commit no qual as pessoas esperam encontrar essas informações).
Eu verifiquei e a abordagem abaixo também mostra exatamente as mesmas alterações (todas as alterações feitas aq
desde a divisão original entre aq
e master
) que a abordagem normal acima, quando você finalmente mescla tudo de volta master
. Portanto, acho que sua única desvantagem real (além de ser excessivamente complexa e não-padrão ...: - /) é que, se você rever n mudanças recentes com git reset --hard HEAD~<n>
e isso ultrapassar a mesclagem, a versão abaixo será revertida no ramo 'errado', que você deve consertar manualmente (por exemplo, com git reflog
& git reset --hard [sha]
).
[Então, o que eu pensava anteriormente era que:]
Há um problema com:
git checkout aq
git merge master
porque as alterações mostradas no commit de mesclagem (por exemplo, se você procurar agora ou mais tarde no Github, Bitbucket ou seu visualizador de histórico de git local favorito) são as alterações feitas no master, que podem não ser exatamente o que você deseja.
Por outro lado
git checkout master
git merge aq
mostra as alterações feitas no aq, que provavelmente é o que você deseja. (Ou, pelo menos, geralmente é o que eu quero!) Mas a mesclagem que mostra as mudanças corretas está no ramo errado!
Como lidar?!
O processo completo, terminando com uma confirmação de mesclagem, mostrando as alterações feitas no aq (conforme a segunda mesclagem acima), mas com a mesclagem que afeta o ramo aq, é:
git checkout master
git merge aq
git checkout aq
git merge master
git checkout master
git reset --hard HEAD~1
git checkout aq
Isto: mescla aq no master, avança rapidamente a mesma mesclagem no aq, desfaz no master e o coloca novamente no aq!
Sinto que estou perdendo alguma coisa - isso parece ser algo que você obviamente deseja e algo difícil de fazer.
Além disso, rebase NÃO é equivalente. Perde os timestamps e a identidade dos commits feitos no aq, o que também não é o que eu quero.