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?
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.
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
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