Você já enviou acidentalmente mais arquivos do que pretendia? Você já usou acidentalmente git commit -a
quando queria dizer git commit
? Eu sei que tenho na ocasião.
Então, digamos que você estava tentando fazer um commit file1
e file2
, mas tem mudanças em file3
que deseja fazer um commit separadamente. Observe que, neste caso, eu quero preservar as alterações em file3
, só quero confirmá-las mais tarde. Se eu não me importasse com as mudanças, poderia usar git reset --hard HEAD^
e começar de novo. Porém, então eu teria que refazer o trabalho nos vários arquivos, o que obviamente não é divertido. Mas se você mantiver o controle do SHA atual do HEAD, pelo qual você pode acessar git log --oneline -1
, então você pode realmente cherry-pick
mudar de volta com a --no-commit
bandeira. Em seguida, você pode usar git reset
para redefinir os arquivos de que não se importa. Isso parece muito abstrato, então aqui estão as etapas uma por uma:
git add file1 file2
git commit -a -m 'some message' # oops!
git log --oneline -1 # keep the SHA reported from this command
git reset --hard HEAD^
git cherry-pick --no-commit 0b13436 # This is the kept SHA from earlier
git reset file3
git commit # This recommits the earlier change, but without file3
Após esses comandos, file3
estará em um estado modificado, mas não confirmado, que é exatamente o que eu queria. Você pode então enviar o arquivo3 separadamente com uma mensagem diferente ou continuar o desenvolvimento.