8 votes

git re-add seulement les fichiers qui ont déjà été mis en scène

Je suis souvent dans une situation où je dois git add a édité un ensemble de fichiers pour une livraison, mais doit ensuite apporter une modification à ces fichiers et se retrouve avec les modifications de ces mêmes fichiers dans le fichier de données de l'utilisateur. Changed but not updated .

Y a-t-il une ligne directe que je peux exécuter pour git add seulement les fichiers qui existent dans Changed but not updated y Changes to be committed des listes ?

markdsievers$git status
# On branch master
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   src/com/foo/Bar.java
#   modified:   src/com/foo/Foo.java
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   src/com/foo/Bar.java
#   modified:   src/com/foo/Foo.java
#   modified:   src/com/foobar/FooBar.java

Pour l'exemple ci-dessus, je veux seulement Foo.java y Bar.java mais pas FooBar.java ajouté à la Changes to be committed: liste.

4voto

manojlds Points 96599

C'est une façon de faire :

 git add -u $(git status --porcelain | grep ^MM | cut -d ' ' -f 2)

0voto

robert petranovic Points 239

La réponse acceptée ne fonctionnera pas si les noms de fichiers contiennent un espace. De même, -u est inutile dans ce cas, mais ajoutera tous les fichiers non gérés s'il n'y a pas de fichiers qui sont à la fois dans le répertoire Changed but not updated y Changes to be committed liste. Utilisez plutôt ceci :

git add $(git status -z | perl -0ne 'print $1 if $_ =~ /^MM(.*)$/')

Cela ne fonctionnera que pour les fichiers qui sont modifiés uniquement. Si vous voulez que cela fonctionne pour les fichiers qui sont supprimés, ajoutés, renommés ou copiés également, utilisez ceci :

git add $(git status -z | perl -0ne 'print $1 if $_ =~ /^[MADRC][MD](.*)$/')

Mais attention à la dernière. Par exemple, si le fichier est ajouté à l'index, mais que sa suppression n'est pas gérée, l'exécution de cette commande supprimera également le fichier dans l'index, ce qui vous fera perdre le contenu de ce fichier.

Notez que les deux ne fonctionneront qu'à partir du répertoire racine de votre dépôt git.

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