Como você move um commit para a área de preparação no git?

143

Se você deseja mover uma confirmação para a área de preparação - isso é descomprometido e mova todas as alterações que estavam nela para a área de preparação (colocando efetivamente a ramificação no estado em que ela estaria antes da confirmação) - como você faz isso? Ou é algo que você não pode fazer?

O mais próximo que sei fazer é copiar todos os arquivos que foram alterados no commit para outro lugar, redefinir a ramificação para o commit antes do commit que você está tentando mover para a área intermediária, mover todos os copiou os arquivos novamente no repositório e adicione-os à área de preparação. Funciona, mas não é exatamente uma solução agradável. O que eu gostaria de poder fazer é apenas desfazer o commit e mover sua mudança para a área de preparação. Isso pode ser feito? E se sim, como?

Jonathan M Davis
fonte

Respostas:

267
git reset --soft HEAD^

Isso redefinirá seu índice para HEAD^(a confirmação anterior), mas deixará suas alterações na área de preparação.

Existem alguns diagramas úteis nos git-resetdocumentos

Se você estiver no Windows, pode ser necessário usar este formato:

git reset --soft HEAD~1
Abizern
fonte
18
Se isso não der resultado, tente o git reset --soft HEAD~1que significa a mesma coisa, mas também funciona no Windows.
Roman Starkov
9
Para esclarecer, til e carot significam coisas diferentes nas versões git. HEAD ~ 1 sempre segue o primeiro pai de uma consolidação, que pode não ser o que você deseja se for uma consolidação de mesclagem com vários pais. No que diz respeito ao shell cmd do Windows, você só precisa escapar do carot com outro carot, por exemplo, "git reset --soft HEAD ^^" para voltar ao "HEAD ^". Isso é puramente um artefato do shell cmd do Windows; portanto, você não precisará fazer isso se usar uma GUI do git no Windows. Tilde e carot são explicados em schacon.github.io/git/git-rev-parse#_specifying_revisions
termina em
Eu adicionei um link para os "diagramas úteis". Você poderia verificar rapidamente se isso leva à seção que você quis dizer? Obrigado
Neuron
5

Uma maneira simples

  1. Arquivos confirmados na área de armazenamento temporário

    git reset --soft HEAD^1

  2. Preparando para o UnStage : (use "git reset HEAD ..." para unstage)

    git reset HEAD git commands.txt or git reset HEAD *ds.txt

aqui, * -> todos os arquivos terminam com ds.txt para o estágio.

Consulte a foto abaixo para maior clareza:

insira a descrição da imagem aqui

Shiva Nandam Sirmarigari
fonte