Usando git, fiz algo parecido com isto
git clone
git checkout {a rev number tree rev before} (here I started to be in a detached head state)
//hacking
git commit
//hacking
git commit
(some commit where made on origin/master)
git pull (which does complete because there was some error due to the fact that I'm no more on master)
Porque me disse que ainda posso confirmar quando estou em um estado de desapego, o fiz. Mas agora eu quero mesclar meu ramo principal desanexado e meu ramo principal local e, em seguida, enviar minhas alterações para origem / mestre.
Portanto, minha pergunta é como eu poderia mesclar o ramo mestre com meu estado real (cabeça desanexada)
git
git-checkout
benzen
fonte
fonte
Respostas:
Crie um ramo onde você está, depois mude para mestre e mescle-o:
fonte
Você poderia fazer algo assim.
Ainda mais simples seria
mas isso tem o pequeno risco de que, se você cometer um erro, pode ser um pouco mais difícil recuperar os commits feitos na cabeça desanexada.
fonte
git merge HEAD@{1}
você provavelmente deve garantir que é aquele que deseja usar usandogit reflog
Isto é o que eu fiz:
Basicamente, pense no
detached HEAD
como um novo ramo, sem nome. Você pode confirmar neste ramo como qualquer outro ramo. Quando terminar de enviar, você deseja enviá-lo para o controle remoto.Portanto, a primeira coisa que você precisa fazer é dar
detached HEAD
um nome a isso. Você pode fazê-lo facilmente, enquanto faz issodetached HEAD
:Agora você pode enviá-lo para controle remoto como qualquer outro ramo.
No meu caso, eu também queria avançar rapidamente neste ramo para dominar junto com os commits que fiz no
detached HEAD
(agorasome-new-branch
). Tudo o que fiz foigit pull # To make sure my local copy of master is up to date
git merge master // This added current state of master to my changes
Claro, mesclado mais tarde
master
.É sobre isso.
fonte
git checkout -b new-branch
trabalhou para mim. As outras sugestões pediramgit branch new-branch
, mas isso ainda me deixou com a cabeça desatada e o novo ramo não pegou minhas alterações.Você pode simplesmente fazer
git merge <commit-number>
ougit cherry-pick <commit> <commit> ...
Conforme sugerido por Ryan Stewart, você também pode criar um ramo a partir do HEAD atual:
Ou apenas uma tag:
fonte
git rev-parse HEAD
No caso de HEAD desanexado, as confirmações funcionam normalmente, exceto que nenhuma ramificação nomeada é atualizada. Para atualizar a ramificação principal com suas alterações confirmadas, faça uma ramificação temporária onde você está (dessa forma, a ramificação temporária terá todas as alterações confirmadas que você fez no HEAD desanexado), depois mude para a ramificação principal e mescle a ramificação temporária com O mestre.
fonte
Um reparo fácil é apenas para criar um novo ramo para que cometem e check-out a ele:
git checkout -b <branch-name> <commit-hash>
.Dessa forma, todas as alterações feitas serão salvas nesse ramo. Caso você precise limpar sua ramificação principal das sobras de confirmação, execute
git reset --hard master
.Com isso, você reescreverá suas ramificações, para não incomodar ninguém com essas alterações. Verifique este artigo para obter uma melhor ilustração do estado HEAD desanexado .
fonte
Talvez não seja a melhor solução (reescreverá a história), mas você também pode
git reset --hard <hash of detached head commit>
.fonte