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.

Foi útil?

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 " (ou mesmo "git add --interactive" , ou "git gui" que tem opção para comitting interativo), e então usar "git commit" em vez de "git commit -a"?

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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top