web-dev-qa-db-fra.com

Résoudre un conflit de fusion 'à la fois ajouté' dans git?

Je me rebase dans git, et un des conflits que j'obtiens est "les deux ajoutés" - c'est-à-dire que le même nom de fichier a été ajouté indépendamment dans ma branche, et sur la branche sur laquelle je me rebase. git status dit moi:

# Unmerged paths:
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#       both added:         src/MyFile.cs

Ma question est, comment puis-je résoudre ce problème? Dois-je utiliser un outil de fusion ou y a-t-il un moyen de le faire uniquement à partir de la ligne de commande? Si je git rm src/MyFile.cs, comment git sait-il quelle version de fichier je souhaite supprimer et quelle version je veux conserver?

124
Jez

Si tu utilises git rm _ git supprimera toutes les versions de ce chemin de l’index afin que votre action de résolution vous laisse sans version.

Vous pouvez utiliser git checkout --ours src/MyFile.cs pour choisir la version de la branche sur laquelle vous rebassez ou git checkout --theirs src/MyFile.cs pour choisir la version de la branche que vous rebassez.

Si vous souhaitez un mélange, vous devez utiliser un outil de fusion ou le modifier manuellement.

126
CB Bailey

Je trouve parfois déroutant d'utiliser le --theirs et --ours options pour identifier la provenance du fichier. La plupart du temps, le mien sera dans la branche que je rebasonne et qui est mentionnée par --theirs!

Vous pouvez aussi utiliser git checkout <tree-ish> -- src/MyFile.cs

Où le <tree-ish> peut être remplacé par le nom de la branche ou par le commit-id contenant le fichier que vous souhaitez conserver.

git checkout 6a363d8 -- src/MyFile.cs

git checkout my_branch -- src/MyFile.cs

git checkout HEAD -- src/MyFile.cs

63
Anas Alkhatib

En faisant ...

git checkout --ours someFile

Il peut sembler que cela n'a rien fait quand on fait le statut de git.

Rappelez-vous juste de le faire après.

git add someFile
git status
36
Tom