Como corrigir o último commit para adicionar um arquivo?

92

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?

    
por Xiè Jìléi 05.01.2011 / 07:43

5 respostas

91

Atualização (alguns anos depois)

Jan Hudec

It's trivial to remove it from index only.

Verdadeiro: você pode redefinir um arquivo para seu conteúdo de índice com bastante facilidade, como a resposta mais recente (escrita por < href="https://superuser.com/users/52119/matt-connolly"> Matt Connolly sugere:

git reset HEAD^ path/to/file/to/revert

HEAD^ permite que o arquivo acesse seu conteúdo no commit anterior antes do último.

Então você pode git commit --amend , como escrevi originalmente abaixo.

Resposta original (janeiro de 2011)

Se este é seu último commit (e você não o colocou em nenhum lugar), você pode alterar isto:
(primeiro esconderijo ou salvar b )

 git commit --amend

Em seguida, exclua b, re-commit. Restaurar be está pronto.

--amend

Used to amend the tip of the current branch.
Prepare the tree object you would want to replace the latest commit as usual (this includes the usual -i/-o and explicit paths), and the commit log editor is seeded with the commit message from the tip of the current branch.
The commit you create replaces the current tip — if it was a merge, it will have the parents of the current tip as parents — so the current top commit is discarded.

    
por 05.01.2011 / 08:08
56
  1. git diff --name-only HEAD^ - (opcional) use para listar os arquivos que foram alterados o último commit.
  2. git reset HEAD^ path/to/file/to/revert - para redefinir o índice para a última versão, deixando a cópia de trabalho intocado.
  3. git commit --amend - para alterar o último commit para inclua as alterações do índice
por 18.03.2013 / 05:21
13

Como alternativa, se você estiver usando git gui , basta selecionar a opção "Emendar último commit", o arquivo adicionado aparecer na lista "Preparado", clicar em seu ícone para movê-lo para a lista "Sem Estágio" e confirmar.

    
por 06.05.2014 / 09:47
8

Se você quiser excluir b do seu último commit

git rm --cached b (will preserve the file in the working tree but remove it from the index)
git commit --amend

Se você quiser remover todas as alterações em b no seu último commit

(backup b)
(modify b to state before incorrect commit)
git commit --amend
(restore b)
    
por 06.05.2014 / 09:34
3

Uma alternativa que não requer hackery de índice, mas preserva a velha mensagem de commit:

$ git reset HEAD^
$ git add <all the files you want, excluding the one you don't want>
$ git commit -C HEAD@{1}

Eu gosto disso porque (a) ele usa comandos que eu uso regularmente, e (b) eu posso fazer git add -p para descobrir exatamente o que eu quero cometer.

    
por 28.10.2016 / 00:45

Tags