2016-05-27 2 views
1

Donc je travaille dans Git et essaye de créer une nouvelle branche où je peux laisser tomber le contenu de ma cachette, et favoriser ma stocker dans les conflits de fusion qui se produisent lorsque vous le faites. Je fais ce qui suit:Vous voulez appliquer ma cachette à une nouvelle branche et remplacer tout ce qui s'y trouve avec ce qui est dans mon cachet

git checkout -b *newbranchname* 
git stash apply 

Et il me dit des conflits de fusion dans un fichier. Comment puis-je faire cela dans le terminal et favoriser automatiquement le stockage dans les conflits sans avoir à les traiter spécifiquement?

Répondre

2

À mon avis, la méthode la plus simple est « ne pas faire » :-)

Au lieu de cela, tournez votre git stash contenu dans une branche de son propre:

git stash branch newbr 

Maintenant vous avez une nouvelle branche newbr, avec l'index prêt à commettre (si vous aviez les articles git add ed à l'index) et l'arbre de travail modifié selon la stash, prêt à être git add ed et validé. Si vous aviez auparavant ajouté des choses, allez-y et engagez-le maintenant, puis ajoutez tout le reste et recommencez. Sinon, ajoutez tout maintenant et commettez. Maintenant, vous avez une nouvelle branche newbr avec un ou deux commits dessus-combien dépend de combien de git commit s vous venez de faire-qui se joint à n'importe quel commit était en place lorsque vous avez fait le git stash.

Vous pouvez maintenant créer une nouvelle branche différente à partir d'un point de départ différent, si c'est ce que vous voulez, et utiliser git cherry-pick pour ramener ces commits, puis rejeter la nouvelle branche. Ou, vous pouvez utiliser git rebase -i (avec les arguments <upstream> et, facultativement, --onto) pour copier les commits ailleurs d'une manière habituelle, en abandonnant les validations d'origine une fois les copies terminées. Ou, si le point de départ existant de newbr est ce que vous vouliez après tout, vous êtes déjà tous ensemble.


Cela dit, si vous avez vraiment ne veulent vérifier que la version travail arborescence des fichiers en conflit, en ignorant complètement la version actuelle de ces fichiers, vous pouvez le faire assez facilement. La chose à retenir est que le nom de référence stash (ou [email protected]{N} pour un certain nombre N) fait référence à la w ORK-arbre commettre ce git stash fait quand il a sauvé la i et w commits du stash bag. Par conséquent:

git checkout stash -- path/to/file 

extraits de la version path/to/file, l'écriture w à travers l'index (résolution où toute fusion en conflit), en ignorant complètement la version HEAD de ce fichier.

(Les i ndex-COMMIT versions des fichiers sont en stash^2, et s'il y a un untracked/all-files engagent, ces fichiers sont en stash^3, comme je l'ai mentionné dans that other answer. Alors que w est engager techniquement une fusion, il est pas une fusion normale, et la validation de tous les fichiers en particulier est très inhabituel, car il a seulement ces fichiers, et aucun des fichiers index/arbre de travail.)

0

Vous pouvez essayer

git merge-recursive --theirs stash^ -- @ stash 

pour voir si vous aimez les résultats.