No meu repositório, tenho um ramo chamado no aq
qual estou trabalhando.
Em seguida, cometi um novo trabalho e erros master
.
Qual é a melhor maneira de colocar esses commits no aq
branch? Crie outro novo ramo master
e mescle-o aq
?
git
version-control
git-merge
Slee
fonte
fonte
git pull origin my_branch_name
Respostas:
Confira a
aq
ramificação e refaça a partir demaster
.fonte
git merge
seria melhor. Se os dois ramos evoluíram com o tempo, considere o melhor para você.Você deve poder apenas
git merge origin/master
quando estiver no seu ramo aq.fonte
rebase
se sua filial for local e não tiver sido enviada paraorigin
. Usemerge
se o seu ramo já foi enviado.rebase
reescreverá a história.Primeiro confira para dominar:
Faça todas as alterações, hotfix e confirmações e empurre seu mestre.
Volte para o seu ramo, 'aq', e junte o mestre nele:
Sua filial estará atualizada com o mestre. Um exemplo bom e básico de mesclagem é a ramificação de 3,2 Git - ramificação e mesclagem básicas .
fonte
Não há garantia de que as correções principais não estejam entre outras confirmações, portanto, você não pode simplesmente mesclar. Faz
assumindo que esses commits representam as correções de bugs.
De agora em diante, mantenha as correções de erros em um ramo separado. Você será capaz de apenas
quando você deseja agrupar todos eles no ramo de desenvolvimento regular.
fonte
Tanto
cherry-pick
os commits relevantes no ramoaq
ou merge ramomaster
em ramoaq
.fonte
Mesclar com
aq
fonte
Jeito fácil
fonte
Para mim, eu já tinha alterações em vigor e queria as últimas da ramificação base. Eu era incapaz de fazer
rebase
echerry-pick
levaria uma eternidade, então fiz o seguinte:então neste caso:
fonte
Isso ( daqui ) funcionou para mim:
Citação:
fonte
Você tem algumas opções.
git rebase master aq
na ramificação que manterá os nomes de confirmação, mas NÃO REBASE se for uma ramificação remota. Você podegit merge master aq
se não se importar em manter os nomes de confirmação. Se você deseja manter os nomes de confirmação e é uma ramificação remota, ela égit cherry-pick <commit hash>
confirmada em sua ramificação.fonte
Você também pode fazer isso executando uma única linha.
git merge aq master
Isso é equivalente a
fonte
git merge a b
mescla ramificaçõesa
eb
na ramificação atual. Masgit merge a
quando você está no ramoa
não fará nada (é por isso que isso parece um pouco com o que você pensa que está fazendo). (Veja git-scm.com/docs/git-merge#Documentation/… .)EDITAR:
A minha resposta abaixo documenta uma maneira de mesclar
master
emaq
, onde se você ver os detalhes da fusão que lista as alterações feitas emaq
antes da fusão, não as alterações feitas nomaster
. Eu percebi que isso provavelmente não é o que você quer, mesmo que você pense que é!Somente:
está bem.
Sim, essa mesclagem simples mostrará que as alterações de
master
foram feitasaq
nesse ponto, e não o contrário; mas tudo bem - já que foi isso que aconteceu! Posteriormente, quando você finalmente mesclar sua ramificaçãomaster
, é quando uma mesclagem finalmente mostrará todas as alterações feitasmaster
(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 entreaq
emaster
) que a abordagem normal acima, quando você finalmente mescla tudo de voltamaster
. 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 comgit 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, comgit reflog
&git reset --hard [sha]
).[Então, o que eu pensava anteriormente era que:]
Há um problema com:
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
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, é:
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.
fonte
Cenário:
Solução
fonte