184 votes

Git annule les changements dans certains fichiers

Pendant le codage, j'ai ajouté des instructions d'impression dans certains fichiers pour garder une trace de ce qui se passait.

Lorsque j'ai terminé, est-il possible de revenir sur les modifications apportées à certains fichiers, mais de valider le fichier sur lequel j'ai travaillé ?

Disons que j'ai ajouté l'impression dans le fichier A mais j'ai modifié le fichier B . B est ce que je veux engager et A je veux qu'il soit remis dans son ancien état.

288voto

1800 INFORMATION Points 55907

Il y a trois façons de faire cela, en fonction de ce que vous avez fait avec les changements du fichier A. Si vous n'avez pas encore ajouté les changements à l'index ou si vous ne les avez pas livrés, alors vous voulez juste utiliser la commande checkout - cela changera l'état de la copie de travail pour correspondre au dépôt :

git checkout A

Si vous l'avez déjà ajouté à l'index, utilisez reset :

git reset A

Si vous l'avez validé, alors vous utilisez la commande 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

Si d'un autre côté, vous l'avez committé, mais que le commit impliquait un grand nombre de fichiers que vous ne voulez pas également rétablir, alors la méthode ci-dessus pourrait impliquer beaucoup de commandes "reset B". Dans ce cas, vous pouvez utiliser cette méthode :

# 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

Une autre méthode encore, nécessite l'utilisation de la commande rebase -i. Celle-ci peut être utile si vous avez plus d'un commit à modifier :

# 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

20voto

dekdev Points 1323

Source : http://git-scm.com/book/en/Git-Basics-Undoing-Things

git checkout -- modifiedfile.java


1)$ git status

vous verrez le fichier modifié

2)$git checkout -- modifiedfile.java

3)$git status

7voto

Stefan Mai Points 9477
git add B # Add it to the index
git reset A # Remove it from the index
git commit # Commit the index

6voto

NicDumZ Points 5566

man git-checkout : git checkout A

3voto

Jay Points 2515

Oui ;

git commit FILE

n'engagera que le FICHIER. Vous pouvez alors utiliser

git reset --hard

pour annuler les changements locaux dans d'autres fichiers.

Il y a peut-être d'autres moyens que je ne connais pas...

edit : ou, comme NicDumZ l'a dit, git-checkout seulement les fichiers sur lesquels vous voulez annuler les changements (la meilleure solution dépend de s'il y a plus de fichiers à livrer ou plus de fichiers à annuler :-)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X