Je veux appliquer (ie lancer une erreur et échouer) que chaque fois que je fais une fusion git je n'ai pas de changements non-statiques, beaucoup dans le même sens qu'un git-rebase ne sera pas fonctionne si des changements non-planifiés existent. Y a-t-il un moyen de faire cela?Imposer une fusion sans modification de git
0
A
Répondre
3
Ce n'est pas joli, mais ça marche. Je serais intéressé de voir une meilleure solution.
Git rejette déjà la fusion si le fichier à fusionner est sale:
$ git init Initialized empty Git repository in /tmp/mmm/.git/ $ echo this is file1 > file1 $ git add file1 $ git ci -m'first commit' file1 [master (root-commit) efd89a6] first commit 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 file1 $ git co -b branch1 Switched to a new branch 'branch1' $ echo change file1 >> file1 $ git ci -m'change on a branch' file1 [branch1 031e317] change on a branch 1 files changed, 1 insertions(+), 0 deletions(-) $ git co master Switched to branch 'master' $ echo change on master >> file1 $ git merge branch1 Updating efd89a6..031e317 error: Your local changes to 'file1' would be overwritten by merge. Aborting. Please, commit your changes or stash them before you can merge.
Reprenons l'exemple:
$ git ci -m'commit change on master' file1 [master 8a2d52c] commit change on master 1 files changed, 1 insertions(+), 0 deletions(-) $ git merge branch1 Auto-merging file1 CONFLICT (content): Merge conflict in file1 Automatic merge failed; fix conflicts and then commit the result. $ vi file1 $ git add file1 $ git ci [master ee16606] Merge branch 'branch1' $ git log --oneline ee16606 Merge branch 'branch1' 8a2d52c commit change on master 031e317 change on a branch efd89a6 first commit $ echo this is file2 > file2 $ git add file2 $ git co -b branch2 A file2 Switched to a new branch 'branch2' $ echo change on branch2 >> file2 $ git ci -m'commit on branch2' file2 [branch2 06ff9c3] commit on branch2 1 files changed, 2 insertions(+), 0 deletions(-) create mode 100644 file2 $ git co master Switched to branch 'master' $ echo this change logically conflicts with the change to file2 on branch2 >> file1
Il est la commande suivante que vous voulez forcer un échec - vous voulez éviter cette fusion lorsque votre arbre est sale. Vous pouvez le faire dans le hook prepare-commit-msg, mais seulement si vous faites --no-ff fusionne, et ne laissez pas la fusion commettre automatiquement. Voici un aperçu du crochet:
#!/bin/sh
case "$2,$3" in
merge,)
echo "Check here if the working tree is dirty. If it is, fail."
exit 1
;;
*) ;;
esac
Vous devez utiliser --no-ff et --no-commit, sur toutes les branches que vous seriez fusionnez dans et que vous voulez protéger des fusions comme celle-ci:
git config branch.master.mergeoptions "--no-commit --no-ff"
Et voici ce que la séance ressemblerait à ceci:
et défaisant à l'état pré-fusion:
$ git reset --merge $ git status # On branch master # Changed but not updated: # (use "git add ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working directory) # # modified: file1 # no changes added to commit (use "git add" and/or "git commit -a")
Questions connexes
- 1. Git: comment "annuler" une fusion
- 2. Imposer l'absence de fusion lorsque des modifications par étapes existent dans git
- 3. Fusion de deux référentiels distants dans Git
- 4. Git fusion commande
- 5. Fusion manuelle sur GIT
- 6. Imposer des images sans perte avec .NET
- 7. Comment imposer une interface?
- 8. Rétablissement d'une fusion git - nôtre
- 9. La fusion commet dans git
- 10. Git: fusion et sous-modules
- 11. Utilisation de la commande de fusion git
- 12. Récupérer l'histoire de git-svn stupide fusion
- 13. Comment imposer l'initialisation de variables de classe sans constructeur?
- 14. Fusion de plusieurs branches git en master?
- 15. git fusion partielle, pas toute la branche
- 16. Fusion de tables sans doublage
- 17. svn: Comment annuler une fusion (sans validation)?
- 18. Fusion sans base TFS
- 19. Imposer une image à télécharger
- 20. Comment annuler "git add." lors d'une fusion?
- 21. Git: Comment créer des correctifs pour une fusion?
- 22. Corriger le repo Git après une fusion incorrecte
- 23. deux référentiels git Fusion que différentes versions
- 24. git: réécrire l'histoire: réordonner et fusion engage
- 25. Qu'est-ce qu'une fusion triviale dans git?
- 26. Fusion de modifications à l'extérieur d'un dépôt git
- 27. débutant question: comment faire une simple fusion?
- 28. Git conflit de fusion depuis que je supprimé un fichier
- 29. C# tableau fusion sans Dupes
- 30. Lire un dépôt Git, sans Git
Ce n'est pas comme ça que ça fonctionne. Vous êtes autorisé à avoir votre copie de travail dans n'importe quelle condition et encore commettre. Si vous rencontrez des problèmes avec des devs ignorants qui commettent des fusions cassées, ajoutez un hook pré-commit qui teste la construction et refusera de commettre si la construction échoue. – Daenyth
Le but de ceci n'a rien à voir avec si la construction brise, mais qu'il est difficile de retourner une fusion qui a des commits entrelacés. – NorthIsUp
Je réalise que j'ai formulé ma question avec un vocabulaire totalement incorrect, voir la bonne question ici: http://stackoverflow.com/questions/3807811/enforce-no-merging-while-staged-changes-exist-in-git – NorthIsUp