Eu modifiquei dois arquivos a
, b
no último commit. Mas o arquivo b
não deve ser confirmado. Qual é o fluxo de trabalho para corrigir isso?
Atualização (alguns anos depois)
É trivial removê-lo apenas do índice.
Verdadeiro: você pode redefinir um arquivo para o seu índice facilmente, como sugere a resposta mais recente (escrita por Matt Connolly ):
git reset HEAD^ path/to/file/to/revert
HEAD^
permite que o arquivo acesse seu conteúdo na confirmação anterior antes da última.
Então você pode git commit --amend
, como escrevi originalmente abaixo.
Com o Git 2.23 (agosto de 2019), você pode usar o novo git restore
comando
git restore --source=HEAD^ --staged -- path/to/file/to/revert
mais curta:
git restore -s@^ -S -- path/to/file/to/revert
Novamente, você pode git commit --amend
, como escrevi originalmente abaixo.
Resposta original (janeiro de 2011)
Se este é seu último commit (e você não o enviou a lugar nenhum), você pode corrigi- lo:
(primeiro stash ou save b
)
git commit --amend
Em seguida, exclua b, reconecte. Restaure be pronto.
--amend
Usado para alterar a ponta do ramo atual.
Prepare o objeto em árvore que você deseja substituir a confirmação mais recente, como de costume (isso inclui os caminhos -i / -o e explícitos usuais), e o editor de log de confirmação é propagado com a mensagem de confirmação da ponta da ramificação atual.
A confirmação que você cria substitui a dica atual - se foi uma mesclagem, os pais da dica atual serão pais - então a confirmação superior atual é descartada.
... Then stash/delete b, re-commit..
, Aqui não deve a palavraThen
serafter
? ---amend
após stach / apagar b, ...git diff --name-only HEAD^
- (opcional) use para listar os arquivos que foram alterados na última confirmação.git reset HEAD^ path/to/file/to/revert
- redefinir o índice para a última versão, mantendo a cópia de trabalho intocada.git commit --amend
- alterar o último commit para incluir as alterações no índicefonte
git commit -a --amend
(ou seja, não adicionar arquivos) para a etapa 3, ou irá confirmar suas alterações na cópia de trabalho, que são as edições que você está tentando remover. Uma etapa opcional 2.5 também pode sergit checkout path/to/file/to/revert
a sua cópia de trabalho.git rm --cached path/to/file/to/revert
desinstale o arquivo sem excluí-lo da árvore.Como alternativa, se você estiver usando
git gui
, basta selecionar a opção "Alterar última confirmação", o arquivo adicionado aparecerá na lista "Estágios", clique no ícone para movê-lo para a lista "Não estágios" e confirmar.fonte
Se você deseja excluir b do seu último commit
Se você deseja remover todas as alterações eb em sua última confirmação
fonte
git rm --cached
e elimine a dança de backup / restauração (-1).Uma alternativa que não requer invasão de índice, mas preserva a antiga mensagem de confirmação:
Gosto disso porque (a) ele usa comandos que uso regularmente e (b) posso fazer
git add -p
para descobrir exatamente o que quero confirmar.fonte