Acabei de me comprometer perfeitamente com o ramo errado. Como faço para desfazer o último commit no meu ramo principal e depois fazer essas mesmas alterações e colocá-las no meu ramo de atualização?
git
git-commit
mikewilliamson
fonte
fonte
git reset --soft HEAD\^
4 anos atrasado sobre o assunto, mas isso pode ser útil para alguém.
Se você esqueceu de criar uma nova ramificação antes de confirmar e confirmar tudo no mestre, não importa quantas confirmações, a seguinte abordagem é mais fácil:
Agora você tem sua ramificação principal igual a
origin/master
e todas as novas confirmações estão ativadasmy_feature
. Observe quemy_feature
é uma filial local, não remota.fonte
master
e redefinirmaster
paraorigin/master
.origin/master
já está no commit que deseja redefinir! O crédito para a ponta é no entanto esta página: github.com/blog/...Se você possui uma cópia de trabalho limpa (não modificada)
Para reverter uma confirmação (verifique o hash da confirmação na próxima etapa):
Para puxar esse commit para um ramo diferente:
Se você modificou ou não as alterações
Observe também que as alterações não rastreadas e modificadas
git reset --hard
serão eliminadas , por isso, se você tiver as que preferir:fonte
git rev-parse BRANCH_NAME
para pegar o sha.git reflog show <branch>
!git stash
antes da reinicialização e usogit stash pop
depois de restaurá-los, por isso não há necessidade de ter medo da--hard
parteSe você já enviou suas alterações, precisará forçar seu próximo envio após redefinir o HEAD.
Aviso: uma redefinição física desfaz todas as modificações não confirmadas em sua cópia de trabalho, enquanto um push forçado substitui completamente o estado da ramificação remota pelo estado atual da ramificação local.
Apenas no caso (no Windows (usando a linha de comando do Windows, não o Bash), na verdade são quatro em
^^^^
vez de um, então éfonte
git reset --hard COMMIT_HASH
git push --force
Recentemente, fiz o mesmo, onde acidentalmente cometi uma mudança de mestre, quando deveria ter me comprometido com outro ramo. Mas eu não forcei nada.
Se você acabou de se comprometer com a ramificação errada e não mudou nada desde então, e não enviou o repositório ao repositório, você pode fazer o seguinte:
NOTA: no exemplo acima, eu estava rebobinando 1 commit com git reset HEAD ~ 1. Mas se você quiser retroceder n commits, poderá fazer o git reset HEAD ~ n.
Além disso, se você acabou se comprometendo com a ramificação errada e também acabou escrevendo um pouco mais de código antes de perceber que se comprometeu com a ramificação errada, você pode usar o git stash para salvar seu trabalho em andamento:
NOTA: Eu usei este site como referência https://www.clearvision-cm.com/blog/what-to-do-when-you-commit-to-the-wrong-git-branch/
fonte
git checkout -b new_branch
partir daí, os commits estavam intactos, apenas foram pressionados e criaram um PR, não ' Não precisa se comprometer novamente.Portanto, se o seu cenário é que você se comprometeu,
master
mas pretende se comprometeranother-branch
(que pode ou não já não existir), mas ainda não o fez, isso é muito fácil de corrigir.Agora todos os seus compromissos
master
estarão ativadosanother-branch
.Originado com amor em: http://haacked.com/archive/2015/06/06/git-migrate/
fonte
another-branch
já existia. Nesse caso, apenas anulou os commits que fiz para dominar e não os colocouanother-branch
.Para elaborar esta resposta, caso você tenha vários commits para mudar, por exemplo,
develop
paranew_branch
:fonte
Se você enfrentar esse problema e tiver o Visual Studio, poderá fazer o seguinte:
Clique com o botão direito do mouse em sua filial e selecione
View History
:Clique com o botão direito do mouse em confirmar para o qual deseja voltar. E reverter ou redefinir, conforme necessário.
fonte
Para várias confirmações no ramo errado
Se, para você, é apenas uma confirmação, existem muitas outras soluções de redefinição mais fáceis disponíveis. Para mim, tive cerca de 10 confirmações feitas acidentalmente em
master
vez de, vamos chamá-lobranch_xyz
, e não queria perder o histórico de confirmação.O que você poderia fazer e o que me salvou estava usando esta resposta como referência, usando um processo de 4 etapas, que é -
master
branch_xyz
master
Aqui estão as etapas acima em detalhes -
Crie uma nova ramificação a partir de
master
(onde acidentalmente cometi muitas alterações)Nota:
-b
flag é usado para criar uma nova ramificaçãoApenas para verificar se acertamos, eu faria uma rápida
git branch
para garantir que estamos natemp_branch_xyz
ramificação e umagit log
para verificar se acertamos os commits.Mesclar a ramificação temporária na ramificação originalmente destinada às confirmações, ou seja
branch_xyz
.Primeiro, mude para a ramificação original, ou seja
branch_xyz
(você pode precisargit fetch
se não tiver)Nota: Não usando
-b
sinalizadorAgora, vamos mesclar a ramificação temporária na ramificação que atualmente efetuamos checkout
branch_xyz
Talvez você precise resolver alguns conflitos aqui, se houver. Você pode pressionar (eu faria) ou seguir para as próximas etapas, depois de mesclar com êxito.
Desfazer o acidental compromete-se a
master
usar esta resposta como referência, primeiro mude para omaster
desfaça-o de volta para corresponder ao controle remoto (ou a um commit específico, se você quiser)
Novamente, eu faria o
git log
antes e o depois apenas para garantir que as alterações pretendidas entrassem em vigor.Apagando as evidências, isso está excluindo a ramificação temporária. Para isso, primeiro você precisa fazer check-out do ramo no qual a temperatura foi mesclada, ou seja,
branch_xyz
(se você permanecermaster
ativado e executar o comando abaixo, poderá obter umerror: The branch 'temp_branch_xyz' is not fully merged
), então vamose exclua a prova desse acidente
Ai está.
fonte
Se o ramo ao qual você deseja aplicar suas alterações já existe ( desenvolvimento do ramo , por exemplo), siga as instruções fornecidas pelo fotanus abaixo e:
E, obviamente, você pode usar tempbranch ou qualquer outro nome de filial em vez de my_feature, se desejar.
Além disso, se aplicável, adie o pop-stash (aplicar) até depois da mesclagem no ramo de destino.
fonte
Para mim, isso foi resolvido revertendo o commit que eu havia enviado e, em seguida, escolhendo o commit para o outro ramo.
Você pode usar
git log
para encontrar o hash correto e enviar essas alterações sempre que quiser!fonte