web-dev-qa-db-fra.com

Git: fusionner en master tout en choisissant automatiquement d'écraser les fichiers master avec une branche

J'utilise Git pour suivre ma source de latex de documentation. Je veux garder la branche principale pleine de documents adaptés à la version utilisateur final, donc quand quelqu'un a besoin de quelque chose, je peux simplement passer à la branche principale, compiler et distribuer le document.

Je crée de nouvelles branches lorsqu'un manuel a besoin d'une mise à jour majeure. Mais, lorsque le manuel est approuvé, il doit être réintégré dans le maître. Lors de la fusion de branch dans master, je voudrais passer une commande à Git pour dire: "oubliez la fusion, utilisez simplement le fichier de branch pour écraser le fichier dans master. " Y a-t-il un moyen de faire cela? Plus précisément, je veux éviter d'ouvrir un outil de fusion à chaque fois. Merci d'avance.

44
Mica

Pour ignorer master, lorsque vous avez branch extrait, puis:

git merge master --strategy=ours

http://schacon.github.com/git/git-merge.html

Comme l'a fait remarquer 'Computer Linguist' ici, cela "ignorera tout de 'master', même s'il y a des changements dans de nouveaux fichiers indépendants". Donc, si vous n'êtes pas l'OP et que vous souhaitez une fusion plus sûre qui ne fait pas comme l'OP dit "oubliez la fusion", utilisez cette excellente commande sûre de 'Computer Linguist', et plus son commentaire pour qu'il obtienne des crédits.

git merge -s recursive -X theirs branch
61
Robert

Dans la version 1.7.1 de Git, vous pouvez utiliser "-Xtheirs" pour fusionner dans la branche elle-même.

Par exemple, si vous commencez dans votre branche master, en commençant dans master

git checkout -b editBranch
-- edit your files --
git add .
git commit -m "Updated the files"
git checkout master
git merge -Xtheirs editBranch

Une autre façon que j'ai vue de le faire sur la base de ce post est de faire une réinitialisation matérielle sur editBranch. Par exemple:

git checkout -b editBranch
-- edit your files --
git add .
git commit -m "Updated the files"
git checkout master
git reset --hard editBranch

Je pense que cette deuxième façon pourrait être le meilleur jeu, mais je n'ai pas encore eu l'occasion de jouer avec.

15
Alan W. Smith

Je pense que vous pouvez le faire avec la stratégie de fusion "la nôtre":

git checkout branch
git merge -s ours master

Mais cela ne fait pas exactement ce que vous voulez: il remplace le contenu de la branche de travail actuellebranch et ce que vous voulez, c'est obtenir le même contenu sur master. Ce que vous voulez vraiment, c'est une stratégie de fusion theirs, et pour cela je vous montre cette question similaire pour une façon de le faire. En pratique, cela revient à réinitialiser master pour pointer sur branch.

2
quark