Comment valider uniquement certains fichiers?

260

J'ai deux projets. Le premier est le projet "officiel" et le second est une légère modification (quelques fichiers ajoutés). J'ai créé une nouvelle branche et je leur ai mis de nouveaux fichiers. Mais au cours du développement, certains fichiers communs aux deux branches sont modifiés.

Comment valider uniquement ces fichiers?

Nips
la source
Ces deux projets sont-ils connectés au même référentiel git?
Oleksandr
Oui, c'est le même référentiel, mais je ne veux pas mettre ma branche sur le serveur
Nips
Alors pourquoi ne fusionnez-vous pas votre nouvelle branche pour la maîtriser (ou une autre branche officielle)
Oleksandr
1
Les réponses à ces questions vous aideront: stackoverflow.com/questions/7161860/… stackoverflow.com/questions/7175869/…
eckes

Réponses:

262

Je suppose que vous souhaitez valider les modifications dans une branche, puis rendre ces modifications visibles dans l'autre branche. Dans git, vous ne devriez avoir aucun changement au-dessus de HEAD lorsque vous changez de branche.

Vous validez uniquement les fichiers modifiés en:

git commit [some files]

Ou si vous êtes sûr d'avoir une zone de rassemblement propre, vous pouvez

git add [some files]       # add [some files] to staging area
git add [some more files]  # add [some more files] to staging area
git commit                 # commit [some files] and [some more files]

Si vous souhaitez rendre ce commit disponible sur les deux branches, vous le faites

git stash                     # remove all changes from HEAD and save them somewhere else
git checkout <other-project>  # change branches
git cherry-pick <commit-id>   # pick a commit from ANY branch and apply it to the current
git checkout <first-project>  # change to the other branch
git stash pop                 # restore all changes again
Alex
la source
22
Pour valider littéralement uniquement ces fichiers, même si d'autres modifications ont été mises en scène, le deuxième exemple ( git commit [some files]qui implique le --onlychangement) doit être utilisé. Le premier exemple ( git add [some files]suivi de git commit) validera également toutes les autres modifications qui avaient été mises en scène.
Lexikos
4
Je serais utile de fournir des exemples pour git commit [certains fichiers]. comme comment remplacer [certains fichiers], virgule, espace blanc?
Claudiu Creanga
2
@claudiu habituellement les éléments shell sont séparés par des espaces. Et si vous plongez assez profondément, vous pouvez changer cela en n'importe quoi
Alex
Si vous pouvez ajouter quelques exemples, cette réponse sera excellente.
Yamur
154

Obtenez une liste des fichiers que vous souhaitez valider

$ git status

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

modified:   file1
modified:   file2
modified:   file3
modified:   file4

Ajouter les fichiers au transfert

$ git add file1 file2

Vérifiez ce que vous vous engagez

$ git status

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   file1
    modified:   file2

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   file3
    modified:   file4

Validez les fichiers avec un message de validation

$ git commit -m "Fixed files 1 and 2"

Si vous validez accidentellement les mauvais fichiers

$ git reset --soft HEAD~1

Si vous souhaitez décompresser les fichiers et recommencer

$ git reset

Unstaged changes after reset:
M file1
M file2
M file3
M file4
Abram
la source
92

Vous pouvez valider des fichiers mis à jour, comme ceci:

git commit file1 file2 file5 -m "commit message"
Adriano Rivolli
la source
30

Une partie de cela semble "incomplète"

Les groupes de personnes ne sauront pas s'ils doivent utiliser des guillemets, etc.

Ajoutez 1 fichier spécifique montrant également les chemins d'accès

git add JobManager/Controllers/APIs/ProfileApiController.cs

Valider (rappelez-vous, la validation est uniquement locale, elle n'affecte aucun autre système)

git commit -m "your message"  

Push to repo distant

git push  (this is after the commit and this attempts to Merge INTO the remote location you have instructed it to merge into)

Autre (s) réponse (s) montrent la cachette etc. que vous voudrez parfois faire

Tom Stickel
la source
11

Si vous avez déjà des fichiers intermédiaires, décompressez-les simplement:

git reset HEAD [file-name-A.ext] [file-name-B.ext]

Ajoutez-les ensuite petit à petit.

kaiser
la source
11

Supposons que vous ayez apporté des modifications à plusieurs fichiers, comme:

  • File1
  • File2
  • Fichier3
  • File4
  • File5

Mais vous ne souhaitez valider que les modifications de File1 et File3.

Il existe deux façons de procéder:

1.Étapez seulement ces deux fichiers en utilisant:

git add file1 file2

puis, engagez

git commit -m "your message"

puis poussez,

git push

2. commit direct

git commit file1 file3 -m "my message"

puis poussez,

git push

En fait, la première méthode est utile dans le cas où nous modifions des fichiers régulièrement et les mettons en scène -> Grands projets, généralement des projets Live.
Mais si nous modifions des fichiers sans les mettre en scène, nous pouvons faire une validation directe -> Petits projets

KamalDeep
la source
Lorsque vous ne spécifiez pas le nom de fichier comme le suggèrent vos deuxièmes exemples, git suppose que l'indicateur de commande pour ces arguments est --only. Ensuite, ce serait la même commande git commit --only file1 --only file3 -m "my message"ou en utilisant un raccourci comme git commit -o file1 -o file3 -m "my message"référence: git-scm.com/docs/git-commit
user
0

C'est une approche simple si vous n'avez pas beaucoup de changements de code:

1. git stash
2. git stash apply
3. remove the files/code you don't want to commit
4. commit the remaining files/code you do want

Ensuite, si vous voulez que le code que vous avez supprimé (bits que vous n'avez pas validés) dans une validation distincte ou une autre branche, alors tout en restant sur cette branche, faites:

5. git stash apply
6. git stash

Avec l'étape 5 comme vous avez déjà appliqué la stash et validé le code que vous vouliez à l'étape 4, le diff et non suivi dans la stash nouvellement appliquée est juste le code que vous avez supprimé à l'étape 3 avant de vous engager à l'étape 4.

En tant que telle, l'étape 6 est une cachette du code que vous n'avez pas [voulu] valider, car vous ne voulez probablement pas vraiment perdre ces modifications, n'est-ce pas? Ainsi, le nouveau stash de l'étape 6 peut maintenant être validé dans cette branche ou dans n'importe quelle autre en faisant git stash appliquer sur la bonne branche et en le validant.

Évidemment, cela suppose que vous effectuez les étapes en un seul flux, si vous planifiez à tout autre moment de ces étapes, vous devrez noter la référence de la stash pour chaque étape ci-dessus (plutôt que simplement la stash de base et appliquer la stash la plus récente).

James
la source