Como eu corrijo um branch git errado?

Eu apenas fiz uma ótima correção no ramo errado. Como posso cancelar o último commit na minha ramificação principal e, em seguida, fazer as mesmas alterações e obtê-las na minha ramificação de atualização?

414
31 мая '10 в 8:30 2010-05-31 08:30 definido por mikewilliamson em 31 de maio '10 at 8:30 AM 2010-05-31 08:30
@ 8 respostas

Se você ainda não clicou nas alterações, também poderá fazer uma reinicialização:

 git reset --soft HEAD^ 

Isso retornará um commit, mas retornará as alterações corrigidas para o seu índice. Assumindo que os branches são relativamente modernos um em relação ao outro, o git permitirá que você execute um check em outro branch, após o qual você pode simplesmente corrigir:

 git checkout branch git commit 

A desvantagem é que você precisa inserir novamente a mensagem de confirmação.

618
31 мая '10 в 8:53 2010-05-31 08:53 respondeu a Blair Holloway em 31 de maio de 2010 às 8:53 2010-05-31 08:53

Se você tiver uma cópia de trabalho limpa (não modificada)

Reverter um commit (certifique-se de verificar o hash de commit para o próximo passo):

 git reset --hard HEAD^ 

Para transferir essa fixação para outro ramo:

border=0
 git checkout other-branch git cherry-pick COMMIT-HASH 

Se você alterou ou não acompanhou as alterações

Observe também que git reset --hard irá matar quaisquer alterações não jogáveis ​​e modificadas que você possa ter, então se você tem aquelas que você pode preferir:

 git reset HEAD^ git checkout . 
79
31 мая '10 в 8:33 2010-05-31 08:33 respondeu a Michael Mrozek em 31 de maio de 2010 às 8:33 2010-05-31 08:33

4 anos atrasado sobre o assunto, mas pode ser útil para alguém.

Se você esqueceu de criar uma nova ramificação antes de confirmar e transferir tudo para master, não importa o quanto você tenha feito, a abordagem a seguir é mais simples:

 git stash # skip if all changes are committed git branch my_feature git reset --hard origin/master git checkout my_feature git stash pop # skip if all changes were committed 

Agora, sua ramificação principal é origin/master e todas as novas confirmações estão em my_feature . Observe que my_feature é um ramo local, não um remoto.

61
06 февр. A resposta é dada fotanus 06 fev. 2014-02-06 17:44 '14 at 17:44 2014-02-06 17:44

Se você já fez suas alterações, precisará forçar o próximo depois de redefinir o HEAD.

 git reset --hard HEAD^ git merge COMMIT_SHA1 git push --force 

Aviso: a reinicialização a frio cancelará todas as alterações pendentes em sua cópia de trabalho, enquanto a ação de pressionar sobrescreverá completamente o estado da ramificação remota com o estado atual da ramificação local.

Apenas no caso, no Windows (usando a linha de comando do Windows, não Bash), existem quatro ^^^^ vez de um, portanto

 git reset --hard HEAD^^^^ 
17
31 мая '10 в 9:11 2010-05-31 09:11 a resposta é dada por Igor Zevaka em 31 de maio '10 às 9:11 2010-05-31 09:11

Recentemente, fiz o mesmo quando acidentalmente fiz a transição para o mestre, quando tive de me dedicar a outro ramo. Mas eu não forcei nada.

Se você acabou de fazer a ramificação errada e não alterou nada desde então e não clicou no repo, você pode fazer o seguinte:

 // rewind master to point to the commit just before your most recent commit. // this takes all changes in your most recent commit, and turns them into unstaged changes. git reset HEAD~1 // temporarily save your unstaged changes as a commit that not attached to any branch using git stash // all temporary commits created with git stash are put into a stack of temporary commits. git stash // create other-branch (if the other branch doesn't already exist) git branch other-branch // checkout the other branch you should have committed to. git checkout other-branch // take the temporary commit you created, and apply all of those changes to the new branch. //This also deletes the temporary commit from the stack of temp commits. git stash pop // add the changes you want with git add... // re-commit your changes onto other-branch git commit -m "some message..." 

NOTA No exemplo acima, rebobinei 1 fixation com git reset HEAD ~ 1. Mas se você quiser retroceder n commits, então você pode fazer um git reset HEAD ~ n.

Além disso, se você terminou de trabalhar com a ramificação errada e também terminou de escrever outro código, antes de perceber que você executou a ramificação errada, use o git stash para salvar seu trabalho inacabado:

 // save the not-ready-to-commit work you're in the middle of git stash // rewind n commits git reset HEAD~n // stash the committed changes as a single temp commit onto the stack. git stash // create other-branch (if it doesn't already exist) git branch other-branch // checkout the other branch you should have committed to. git checkout other-branch // apply all the committed changes to the new branch git stash pop // add the changes you want with git add... // re-commit your changes onto the new branch as a single commit. git commit -m "some message..." // pop the changes you were in the middle of and continue coding git stash pop 

NOTA Eu usei este site como um link https://www.clearvision-cm.com/blog/what-to-do-when-you-commit-to-the-wrong-git-branch/

4
31 мая '17 в 0:51 2017-05-31 00:51 a resposta é dada por Ali Mizan em 31 de maio de '17 às 00:51 2017-05-31 00:51

Então, se o seu script é que você passou pelo master , mas deveria passar para another-branch (que pode ou não existir), mas você ainda não clicou, isso é muito fácil de corrigir.

 // if your branch doesn't exist, then add the -b argument git checkout -b another-branch git branch --force master origin/master 

Agora todos os seus compromissos com o master estarão em another-branch .

Fontes: http://haacked.com/archive/2015/06/29/git-migrate/

2
08 апр. Responder Lorcan O'Neill 08 abr 2016-04-08 16:19 '16 às 16:19 2016-04-08 16:19

Se você encontrar esse problema e tiver o Visual Studio, poderá fazer o seguinte:

Clique com o botão direito do mouse em sua ramificação e selecione View History :

2019

05 апр. a resposta é dada Trevor 05 abr. 2017-04-05 02:39 '17 às 2:39 2017-04-05 02:39

Se a ramificação na qual você deseja aplicar suas alterações já existir (por exemplo, para desenvolver ramificações), siga as instruções fornecidas por fotanus abaixo, então:

 git checkout develop git rebase develop my_feature # applies changes to correct branch git checkout develop # 'cuz rebasing will leave you on my_feature git merge develop my_feature # will be a fast-forward git branch -d my_feature 

E, obviamente, você poderia usar tempbranch ou qualquer outro nome de ramificação em vez de my_feature, se quiser.

Além disso, se aplicável, atrase a mensagem pop-up (aplicar) até que você esteja unido em sua ramificação de destino.

0
24 авг. a resposta é dada por fbicknel 24 ago. 2016-08-24 01:15 '16 às 1:15 am 2016-08-24 01:15

Outras questões sobre tags ou Ask a Question