J'ai lu la section Bases de branchement et de fusion du Git Community Book.
Donc , je suis et créer une branche: experimental
.
Alors je:
- passer à la branche expérimentale (git checkout experimental)
- faire un tas de changements
- le valider (git commit -a)
- passer à la branche principale (git checkout master)
- apporter des modifications et s'y engager
- revenir à expérimental (git checkout experimental)
- fusionner le master en expérimental (git merge master)
il y a des conflits mais après les avoir résolus, j'ai `` ajouté mon fichier ''
Et maintenant je suis coincé, je ne peux pas retourner au maître
quand je fais
$ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.
et j'ai fait:
$ git rebase --abort
Pas de rebase en cours?
et j'ai fait :
$ git add res/layout/socialhub_list_item.xml
$ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.
Que puis-je faire pour revenir à ma branche principale?
git commit gf2n.cpp -m "Hand merge gf2n.cpp due to conflicts"
, il en résultefatal: cannot do a partial commit during a merge.
. Et bien sûr, les "validations partielles" ne semblent pas être documentées ou discutées nulle part dans les pages de manuel de git. Effectuer ungit merge
après le correctif se traduit parPlease, commit your changes before you can merge.
un outil de cul cassé ...git merge --continue
. Voir ma réponse ciRéponses:
En cas de conflit lors d'une fusion, vous devez terminer la validation de la fusion manuellement. Il semble que vous ayez effectué les deux premières étapes, pour modifier les fichiers en conflit puis les exécuter
git add
pour les marquer comme résolus. Enfin, vous devez réellement valider la fusion avecgit commit
. À ce stade, vous pourrez à nouveau changer de branche.la source
git commit -am "your commit message"
d'effectuer simultanément l'ajout et la validation.git commit
fonctionne. Et il est préférable de l'utiliser pour obtenir le message de validation de fusion par défaut renseigné pour vous. J'évite `git commit -am" car il remplacera le messagegit push
.Avec Git 2.12 (Q1 2017), vous aurez la commande la plus naturelle:
Voir commit c7d227d (15 décembre 2016) par Jeff King (
peff
) .Voir commit 042e290 , commit c261a87 , commit 367ff69 (14 décembre 2016) par Chris Packham (
cpackham
) .(Fusionné par Junio C Hamano -
gitster
- en commit 05f6e1b , 27 déc.2016 )Voir les notes de version 2.12 .
la source
Si vous vous retrouvez coincé lors d'une fusion / rebase, vous pouvez toujours
pour restaurer votre travail à l'état du dernier commit. Cela perdra vos modifications de l'arborescence de travail, donc si vous aviez des modifications locales avant la fusion, elles disparaîtront après cela - c'est pourquoi il est conseillé de ne pas démarrer une fusion lorsque vous avez des modifications locales. :)
la source
git reset --hard
annule les modifications non engagéesgit merge --abort
, qui n'a aucun risque de perdre quoi que ce soit?Just
git commit
it.Facultativement
git abort
:j'ai rencontré un conflit de fusion. Comment annuler la fusion?
Pour vous simplifier la vie avec les fusions, installez kdiff3 et configurez-le comme un outil de fusion. Instructions: http://doodkin.com/2016/05/29/git-merge-easy-github-this-branch-has-conflicts-that-must-be-resolved-use-the-command-line/
Cette page contient cette vidéo: https://www.youtube.com/watch?v=Cc4xPp7Iuzo
la source
Chaque fois que vous fusionnez deux branches à l'aide de la commande
git merge brancha branchb
, il existe deux possibilités:Une branche (disons brancha) peut être atteinte par l'autre branche (disons brancheb) en suivant son historique de commits.Dans ce cas, git avance simplement la tête pour pointer vers la branche récente (dans ce cas, branchb).
2.Mais si les deux branches ont divergé à un point plus ancien, alors git crée un nouveau snapshot et ajoute un nouveau commit qui pointe dessus. Donc, s'il n'y a pas de conflit entre les branches que vous fusionnez, git crée un nouveau commit en douceur.
Revenons maintenant au cas intéressant où il y a des conflits de fusion entre les branches qui fusionnent. Je cite ceci sur la page https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging
Donc, en cas de conflits de fusion, vous devez résoudre le conflit, puis ajouter les modifications que vous avez apportées à la zone de transit à l'aide
git add filename
, puis valider les modifications à l'aide de la commandegit commit
qui a été interrompue par git en raison du conflit. J'espère que cela explique votre requete. Visitez également le lien ci-dessus pour une compréhension détaillée. En cas de question, veuillez commenter ci-dessous, je serai heureux de vous aider.la source
Les étapes suivantes après la résolution manuelle des conflits sont les suivantes: -
git merge --continue
,git cherry-pick --continue
,git rebase --continue
]la source
error: Failed to merge in the changes. Patch failed at 0001 ADD: _type to styleguide The copy of the patch that failed is found in: .git/rebase-apply/patch When you have resolved this problem, run "git rebase --continue". If you prefer to skip this patch, run "git rebase --skip" instead. To check out the original branch and stop rebasing, run "git rebase --abort".
git merge --continue
, ce que j'essaie de faire, se traduit parerror: unknown option 'continue'
. Je suis certain que votre réponse est fausse, car lagit-merge
page de manuel ne la répertorie pas. Quelle version de Git utilisez-vous? J'utilisegit version 1.8.5.2 (Apple Git-48)
. J'ai également essayé avec MacPortsgit version 2.9.3
.git commit
Un conflit de fusion se produit lorsque deux branches que vous essayez de fusionner ont toutes deux modifié la même partie du même fichier. Vous pouvez générer une liste de conflits avec
git status
.Lorsque la ligne en conflit est rencontrée, Git édite le contenu des fichiers affectés avec des indicateurs visuels qui marquent les deux côtés du contenu en conflit.
Lorsque vous corrigez vos fichiers en conflit et que vous êtes prêt à fusionner, il vous suffit d'exécuter
git add
etgit commit
de générer la validation de fusion. Une fois la validation effectuée,git push
les modifications apportées à la branche.Article de référence: Git merge .
la source
Une fois tous les fichiers ajoutés, l'étape suivante est un " git commit ".
"git status" suggérera quoi faire: les fichiers à ajouter sont listés en bas, et une fois qu'ils sont tous terminés, il suggérera un commit en haut, où il explique le statut de fusion de la branche actuelle.
la source
La première chose que je veux clarifier est que les noms de branche ne sont qu'un alias d'un commit spécifique. un commit est ce que git fonctionne, lorsque vous tirez, poussez la fusion et ainsi de suite. Chaque commit a un identifiant unique.
Lorsque vous effectuez une fusion de $ git, ce qui se passe réellement est que git essaie d'avancer rapidement votre branche actuelle vers la validation sur laquelle la branche référencée est activée (en d'autres termes, les deux noms de branches pointent vers la même validation.) Ce scénario est le plus simple pour git. à traiter, car il n'y a pas de nouveau commit. Pensez au maître qui saute sur le lilipad sur lequel votre branche se refroidit. Il est possible de définir l'indicateur --no-ff, auquel cas git créera un nouveau commit, qu'il y ait ou non des conflits de code.
Dans une situation où il y a des conflits de code entre les deux branches que vous essayez de fusionner (généralement deux branches dont l'historique de validation partage une validation commune dans le passé), l'avance rapide ne fonctionnera pas. git peut toujours être capable de fusionner automatiquement les fichiers, tant que la même ligne n'a pas été modifiée par les deux branches dans un fichier en conflit. dans ce cas, git fusionnera les fichiers en conflit pour vous ET les validera automatiquement. Vous pouvez prévisualiser comment git a fait en faisant $ git diff --cached. Ou vous pouvez passer l'indicateur --no-commit à la commande merge, qui laissera les fichiers modifiés dans votre index que vous devrez ajouter et valider. Mais vous pouvez $ git diff ces fichiers pour voir ce que la fusion va changer.
Le troisième scénario est quand il y a des conflits que git ne peut pas résoudre automatiquement. Dans ce cas, vous devrez les fusionner manuellement. À mon avis, c'est plus facile à faire avec une fusion, comme la fusion araxis ou p4merge (gratuit). De toute façon, vous devez faire chaque fichier un par un. Si la fusion semble être bloquée, utilisez $ git merge --continue, pour la pousser. Git devrait vous dire si cela ne peut pas continuer, et si oui, pourquoi pas. Si vous sentez que vous avez raté la fusion à un moment donné, vous pouvez faire $ git merge --abort, et toute fusion sera annulée et vous pourrez recommencer. Lorsque vous avez terminé, chaque fichier que vous avez fusionné sera un fichier modifié qui doit être ajouté et validé. Vous pouvez vérifier où se trouvent les fichiers avec le statut $ git. Si vous n'avez pas encore validé les fichiers fusionnés. Vous devez le faire pour terminer la fusion.
la source
Il peut être tard. C'est arrivé parce que votre git HEAD n'est pas mis à jour. cette recommandation résoudrait cela
git reset HEAD
.la source