Comment faire pour que git merge gère les changements non engagés dans mon arbre de travail?

un collègue et moi travaillons tous les deux sur la branche principale en ce moment. J'ai du code dans mon arbre de travail que je ne veux pas commettre (déclarations de débogage et autres). Maintenant, s'il propage des modifications à certains de ces mêmes fichiers, Je ne peux pas les fusionner:

$ git merge origin/master
Updating 1b8c5c6..eb44c23
error: Entry 'blah.java' not uptodate. Cannot merge.

venant d'un arrière-plan subversion, je suis habitué à ce que mon arbre de travail soit automatiquement fusionné lorsque je sors des modifications du dépôt et que s'il y a des conflits, je les résous manuellement.

La le moyen le plus rapide que j'ai trouvé pour faire ceci dans git est:

$ git stash
$ git merge origin/master
$ git stash pop

essentiellement, supprimer mes changements non engagés, faire la fusion et ensuite appliquer de nouveau les changements. Comment puis-je dire à merge de fusionner automatiquement mon arbre de travail avec les modifications que j'essaie de tirer?

46
demandé sur Jeremy Huiskamp 2009-05-02 04:33:38
la source

3 ответов

autant Que je peux dire, le meilleur que vous pouvez faire est ce que vous avez déjà avec git stash. Moi aussi, je trouve étrange que merge ne veuille s'occuper que des arbres propres.

19
répondu Norman Ramsey 2009-05-02 04:35:41
la source

Oubliez tout ce que vous avez appris de subversion.

Toujours s'engager avant d'introduire des changements externes.

Imaginez que vous aviez un arbre qui fonctionnait le plus -- peut-être pas parfait, mais vous faites des progrès. Puis vous allez faire une fusion et le code que vous apportez vient de faire des ravages (était buggy lui-même, trop de conflits à traiter, etc...). Ce ne serait pas sympa si tu pouvais juste défaire ça?

Si vous vous engagez, vous pouvez. Si vous ne le faites pas, vous êtes juste va souffrir.

Rappelez-vous: Ce que vous vous engager à ne pas être ce que vous poussez, mais ce que vous ne commettez pas vous pouvez facilement perdre.

il suffit de faire la chose sûre et facile et de s'engager tôt et s'engager souvent.

37
répondu Dustin 2009-05-02 05:45:08
la source

on ne peut pas dire git merge pour fusionner les changements sur les fichiers qui ont des changements par rapport à votre dépôt local. Cela vous protège de perdre vos changements sur ces moments où une fusion se passe mal.

avec L'approche CVS et SVN à la fusion, si vous n'avez pas copié manuellement vos fichiers avant la mise à jour et qu'il les a brouillés sur merge, vous devez ré-éditer manuellement pour revenir à un bon état.

Si vous valider vos modifications ou les ranger avant de faire une fusion, tout est réversible. Si la fusion ne va pas bien, vous pouvez essayer plusieurs façons de le faire travailler et aller avec celui qui fonctionne le mieux.

si vous commettez des changements expérimentaux ou de débogage, vous pouvez utiliser git rebase pour les déplacer après les commits que vous obtenez via git merge pour faciliter leur élimination ou pour éviter de les pousser accidentellement vers un dépôt.

notez qu'en utilisant git rebase sur une branche que vous avez poussée vers un dépôt partagé causera du chagrin pour tous ceux qui tire de ce référentiel.

je préfère utiliser git stash dans ces cas, mais je ne l'utilise que si la fusion des fichiers que j'ai modifié et non-engagés.

2
répondu Jamey Hicks 2010-01-22 17:05:03
la source

Autres questions sur git git-stash git-merge