Question

J'ai deux branches entièrement fusionnées.

Cependant, une fois la fusion terminée, je me rends compte qu'un fichier a été gâché par la fusion (quelqu'un d'autre a fait un formatage automatique, gah), et il serait simplement plus facile de passer à la nouvelle version dans l'autre. branche, puis réinsérez mon changement d’une ligne après l'avoir amené dans ma branche.

Alors, quel est le moyen le plus simple de faire cela?

Était-ce utile?

La solution

Exécutez ceci à partir de la branche où vous voulez que le fichier se termine:

git checkout otherbranch myfile.txt

Formules générales:

git checkout <commit_hash> <relative_path_to_file_or_dir>
git checkout <remote_name>/<branch_name> <file_or_dir>

Quelques notes (à partir de commentaires):

  • En utilisant le hash de commit, vous pouvez extraire des fichiers de n'importe quel commit
  • Ceci fonctionne pour les fichiers et les répertoires
  • remplace le fichier myfile.txt et mydir
  • Les caractères génériques ne fonctionnent pas, mais les chemins relatifs
  • Plusieurs chemins peuvent être spécifiés

une alternative:

git show commit_id:path/to/file > path/to/file

Autres conseils

Je me suis retrouvé à cette question sur une recherche similaire. Dans mon cas, je cherchais à extraire un fichier d'une autre branche dans un répertoire de travail en cours différent de l'emplacement d'origine du fichier. Répondre :

git show TREEISH:path/to/file >path/to/local/file

Qu'en est-il de l'utilisation de la commande checkout:

  git diff --stat "$branch"
  git checkout --merge "$branch" "$file"
  git diff --stat "$branch"

Après la réponse de madlep, vous pouvez également simplement copier un répertoire d'une autre branche avec le blob de répertoire.

git checkout other-branch app/**

En ce qui concerne la question de l'op si vous n'avez modifié qu'un seul fichier, cela fonctionnera très bien ^ _ ^

1) Assurez-vous que vous êtes dans la branche où vous avez besoin d’une copie du fichier. par exemple: je veux un fichier de sous-branche dans le maître, vous devez donc passer à la caisse ou vous devez être dans le maître maître de sortie git

2) Maintenant, vérifiez le fichier spécifique que vous voulez de la sous-branche au maître,

git checkout sub_branch file_path/my_file.ext

here sub_branch signifie où vous avez ce fichier suivi du nom du fichier que vous devez copier.

Veuillez noter que dans la réponse acceptée, la première option met en scène l'intégralité du fichier de l'autre branche (comme git add ... avait été effectuée), et que la deuxième option ne fait que copier le fichier, mais ne modifie pas les modifications (comme si vous veniez de modifier le fichier manuellement et que vous aviez des différences non résolues).

Git copier le fichier depuis une autre branche sans le stocker

Modifications effectuées (par exemple, ajouter un nom de fichier) :

$ git checkout directory/somefile.php feature-B

$ git status
On branch feature-A
Your branch is up-to-date with 'origin/feature-A'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   directory/somefile.php

Modifications en attente (non planifiées ni validées):

$ git show feature-B:directory/somefile.php > directory/somefile.php

$ git status
On branch feature-A
Your branch is up-to-date with 'origin/feature-A'.
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:   directory/somefile.php

no changes added to commit (use "git add" and/or "git commit -a")
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top