mudanças Git desfazer em alguns arquivos [duplicado]
-
06-09-2019 - |
Pergunta
Esta questão já tem uma resposta aqui:
Enquanto codificação eu adicionei instruções de impressão em alguns arquivos para acompanhar o que estava acontecendo.
Quando eu sou feito, é possível reverter as alterações em alguns arquivos, mas cometer o arquivo que eu realmente trabalhou?
Say I adicionado impressão em A
arquivo, mas eu modifiquei B
arquivo. B
é o que eu quero cometer e A
, eu quero ser conjunto voltar ao seu antigo estado.
Solução
Existem três maneiras básicas de fazer isso, dependendo do que você tem feito com as alterações no arquivo A. Se você ainda não tiver adicionado as alterações ao índice ou comprometidos eles, então você só quer usar o comando check-out - isso vai mudar o estado da cópia de trabalho para coincidir com o repositório:
git checkout A
Se você adicionou-lo para já o índice, o uso de reset:
git reset A
Se você tivesse cometido-lo, então você usar o comando revert:
# the -n means, do not commit the revert yet
git revert -n <sha1>
# now make sure we are just going to commit the revert to A
git reset B
git commit
Se, por outro lado, você tinha cometido, mas o commit envolvidos em vez de um monte de arquivos que você também não quer reverter, em seguida, o método acima pode envolver um monte de comandos "Reset B". Neste caso, você pode gostar de usar este método:
# revert, but do not commit yet
git revert -n <sha1>
# clean all the changes from the index
git reset
# now just add A
git add A
git commit
Outro método novo, requer o uso do comando rebase -i. Este pode ser útil se você tiver mais de um comprometem a editar:
# use rebase -i to cherry pick the commit you want to edit
# specify the sha1 of the commit before the one you want to edit
# you get an editor with a file and a bunch of lines starting with "pick"
# change the one(s) you want to edit to "edit" and then save the file
git rebase -i <sha1>
# now you enter a loop, for each commit you set as "edit", you get to basically redo that commit from scratch
# assume we just picked the one commit with the erroneous A commit
git reset A
git commit --amend
# go back to the start of the loop
git rebase --continue
Outras dicas
Fonte: http://git-scm.com/book/en/Git-Basics -Undoing-Things
git checkout - modifiedfile.java
1) $ git status
Você verá o arquivo modificado
2) $ git checkout - modifiedfile.java
3) $ git status
git add B # Add it to the index
git reset A # Remove it from the index
git commit # Commit the index
homem git-checkout : git checkout A
Sim;
git commit FILE
cometerá apenas FILE. Então você pode usar
git reset --hard
para alterações locais de desfazer em outros arquivos.
Pode haver outras maneiras também que eu não sei sobre ...
edit: ou, como NicDumZ disse, git-checkout apenas os arquivos que você deseja desfazer as alterações no (a melhor solução depende se houver mais arquivos para cometer ou mais arquivos para desfazer: -)
Porque você não pode simplesmente marcar o que muda você quer ter em um commit usando " git add
Na sua situação (para o exemplo) seria:
prompt> git add B
prompt> git commit
Apenas muda para arquivo B seriam comprometidos, e arquivar um ficaria "sujo", ou seja, com essas instruções de impressão na versão área de trabalho. Quando você quiser remover essas instruções de impressão, seria enought para uso
prompt> git reset A
ou
prompt> git checkout HEAD -- A
para reverter para a versão comitted (versão do HEAD, ou seja, "git show de CABEÇA: A" versão).