Meu problema é que alterei um arquivo, por exemplo: README, adicionei uma nova linha ' this for my test line ' e salvei o arquivo, depois emiti os seguintes comandos
git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: README
#
no changes added to commit (use "git add" and/or "git commit -a")
git add README
git commit -a -m 'To add new line to readme'
Não forcei o código no github, agora quero cancelar esse commit.
Para isso eu usei
git reset --hard HEAD~1
Mas perdi a linha recém-adicionada ' this for my test line ' do arquivo README. Isso não deveria acontecer. Eu preciso que o conteúdo esteja lá. Existe uma maneira de reter o conteúdo e cancelar meu commit local?
git
git-reset
git-commit
Amal Kumar S
fonte
fonte
git revert
, o que cria um novo commit com o diff inverso do commit revertido. A redefinição simplesmente aponta sua ramificação atual para uma confirmação diferente, nesse caso, a anterior à confirmação que você deseja "esquecer".git-commit
pode ser abortado se você deixar a mensagem em branco; portanto, se você ainda não concluiu o commit, isso pode ser útil.Respostas:
Basta usar
git reset
sem a--hard
bandeira:PS: Em sistemas baseados em Unix, você pode usar o
HEAD^
que é igual aHEAD~1
. No WindowsHEAD^
não funcionará porque^
sinaliza uma continuação de linha. Portanto, seu prompt de comando apenas perguntará a vocêMore?
.fonte
--mixed
no manual .@^
como uma abreviação paraHEAD^
.Use em
--soft
vez de--hard
sinalizar:fonte
git reset --soft HEAD^
irá remover último local (unpushed) cometer, mas vai manter as alterações que você fezgit reset --soft HEAD~
no windowsSe você estiver no meio de um commit (ou seja, já no seu editor), poderá cancelá-lo excluindo todas as linhas acima da primeira
#
. Isso abortará o commit.Portanto, você pode excluir todas as linhas para que a mensagem de confirmação fique vazia e salve o arquivo:
Em seguida, você receber uma mensagem que diz
Aborting commit due to empty commit message.
.EDITAR :
Você também pode excluir todas as linhas e o resultado será exatamente o mesmo.
Para excluir todas as linhas no vim (se esse for o seu editor padrão), quando estiver no editor, digite
gg
para ir para a primeira linha e, em seguida,dG
para excluir todas as linhas. Por fim, escreva e saia do arquivowq
e seu commit será abortado.fonte
rebase -i mybranchname
A primeira coisa que você deve fazer é determinar se deseja manter as alterações locais antes de excluir a mensagem de confirmação.
Use
git log
para mostrar as mensagens de confirmação atuais e encontre ocommit_id
antes da confirmação que você deseja excluir, não a confirmação que deseja excluir.Se você deseja manter os arquivos alterados localmente e apenas excluir a mensagem de confirmação:
git reset --soft commit_id
Se você deseja excluir todos os arquivos alterados localmente e a mensagem de confirmação:
git reset --hard commit_id
Essa é a diferença de macio e duro
fonte
Você pode dizer ao Git o que fazer com o seu índice (conjunto de arquivos que se tornará o próximo commit) e o diretório de trabalho ao executar a redefinição do git usando um dos parâmetros:
--soft
: Somente confirmações serão redefinidas, enquanto o Índice e o diretório de trabalho não são alterados.--mixed
: Isso redefinirá o índice para corresponder ao HEAD, enquanto o diretório de trabalho não será tocado. Todas as alterações permanecerão no diretório de trabalho e aparecerão como modificadas.--hard
: Redefine tudo (confirma, indexa, diretório de trabalho) para corresponder ao HEAD.No seu caso, eu usaria
git reset --soft
para manter as alterações modificadas no Índice e no diretório de trabalho. Certifique-se de verificar isso para obter uma explicação mais detalhada.fonte
Use o comando abaixo:
Após isso, você também poderá visualizar os arquivos que retornam como abaixo da resposta.
fonte