Alterei várias coisas na última hora e as comprometi passo a passo, mas acabei de perceber que esqueci de adicionar um arquivo alterado algumas confirmações atrás.
O Log fica assim:
GIT TidyUpRequests u:1 d:0> git log
commit fc6734b6351f6c36a587dba6dbd9d5efa30c09ce
Author: David Klein <>
Date: Tue Apr 27 09:43:55 2010 +0200
The Main program now tests both Webservices at once
commit 8a2c6014c2b035e37aebd310a6393a1ecb39f463
Author: David Klein <>
Date: Tue Apr 27 09:43:27 2010 +0200
ISBNDBQueryHandler now uses the XPath functions from XPath.fs too
commit 06a504e277fd98d97eed4dad22dfa5933d81451f
Author: David Klein <>
Date: Tue Apr 27 09:30:34 2010 +0200
AmazonQueryHandler now uses the XPath Helper functions defined in XPath.fs
commit a0865e28be35a3011d0b6091819ec32922dd2dd8 <--- changed file should go here
Author: David Klein <>
Date: Tue Apr 27 09:29:53 2010 +0200
Factored out some common XPath Operations
Alguma ideia?
Respostas:
Use
git rebase
. Especificamente:git stash
para armazenar as alterações que você deseja adicionar.git rebase -i HEAD~10
(ou o número de confirmações que você deseja ver).a0865...
) para edição, alterando a palavrapick
no início da linha paraedit
. Não exclua as outras linhas, pois isso excluiria as confirmações. [^ Vimnote]git stash pop
git add <file>
.git commit --amend --no-edit
.git rebase --continue
que reescreva o restante dos seus commit contra o novo.[^ vimnote]: Se você estiver usando
vim
, precisará pressionar a Inserttecla para editar Esce digitar:wq
para salvar o arquivo, sair do editor e aplicar as alterações. Alternativamente, você pode configurar um git user-friendly cometer editor comgit config --global core.editor "nano"
.fonte
git add
.edit
, NÃO DELETE os outros commit listados no arquivo. Se o fizer, as confirmações serão excluídas e você precisará seguir estas etapas para recuperá-las.git add .
Para "consertar" um commit antigo com uma pequena alteração, sem alterar a mensagem de commit do commit antigo, onde
OLDCOMMIT
é algo como091b73a
:Você também pode usar
git commit --squash=OLDCOMMIT
para editar a antiga mensagem de confirmação durante o rebase.git rebase --interactive
exibirá um editor de texto (que pode ser configurado ) para confirmar (ou editar) a sequência de instruções rebase . Há informações para alterações das instruções de rebase no arquivo; apenas salve e feche o editor (:wq
invim
) para continuar com o rebase.--autosquash
colocará automaticamente quaisquer--fixup=OLDCOMMIT
confirmações na ordem desejada. Observe que--autosquash
só é válido quando a--interactive
opção é usada.^
inOLDCOMMIT^
significa que é uma referência ao commit logo antesOLDCOMMIT
.As etapas acima são boas para verificar e / ou modificar a sequência de instruções de rebase , mas também é possível pular / automatizar o editor de texto de rebase interativo da seguinte maneira:
GIT_SEQUENCE_EDITOR
para um script .Veja git commit e git rebase . Como sempre, ao reescrever o histórico do git , você só deve consertar ou confirmar squash que ainda não publicou para mais ninguém (incluindo usuários aleatórios da Internet e criar servidores).
fonte
--autosquash
é válido apenas quando a--interactive
opção é usada .git config --global core.editor "pico"
. Existem várias outras maneiras de configurar o git e / ou alterar o editor padrão do seu sistema, etc.com o git 1.7, existe uma maneira muito fácil de usar
git rebase
:prepare seus arquivos:
crie uma nova confirmação e reutilize a mensagem de confirmação da confirmação "quebrada"
coloque um prefixo
fixup!
na linha de assunto (ousquash!
se você deseja editar o commit (mensagem)):use
git rebase -i --autosquash
para corrigir seu commitfonte
You asked me to rebase without telling me which branch you want to rebase against, and 'branch.master.merge'
e, se eu usargit rebase -i --autosquash
, recebo apenas umanoop
linha de assunto, rebatizando o commit para si mesmo. Alguma idéia do que eu faço de errado?git rebase -i --autosquash HEAD~10
Você pode tentar uma
rebase --interactive
sessão para alterar seu commit antigo (desde que você ainda não os envie por push para outro repo).fonte