Je sais comment fusionner les modifications à l’aide de vimdiff, mais, si je sais que tout le fichier est utile à conserver ou à jeter, comment puis-je le faire?
Je ne veux pas ouvrir vimdiff pour chacun d'entre eux, je souhaite désormais une commande qui dit "garder local" ou "rester distant".
E.G: J'ai fusionné avec des fichiers marqués comme modifiés parce que quelqu'un les a ouverts sous Windows, modifiant l'EOL, puis validés. Lors de la fusion, je veux juste garder ma propre version et jeter la sienne.
Je suis également intéressé par le contraire: j'ai tout gâché et je veux accepter le fichier distant, en abandonnant mes modifications.
Vous pouvez aussi bien faire:
git checkout --theirs /path/to/file
conserver le fichier distant, et:
git checkout --ours /path/to/file
garder le fichier local.
Puis git add
et tout est fait.
Cette approche semble plus simple, évitant la nécessité de sélectionner individuellement chaque fichier:
# keep remote files
git merge --strategy-option theirs
# keep local files
git merge --strategy-option ours
ou
# keep remote files
git pull -Xtheirs
# keep local files
git pull -Xours
Copié directement à partir de: Résoudre les conflits de fusion Git en faveur de leurs modifications lors d'un pull
git checkout {branch-name} -- {file-name}
Cela utilisera le fichier de la branche de votre choix.
J'aime cela parce que posh-git
autocomplete fonctionne très bien avec cela. Cela supprime également toute ambiguïté quant à savoir quelle branche est distante et quelle branche est locale. Et --theirs
n'a pas fonctionné pour moi de toute façon.
Pour la fin de ligne, référez-vous à man git-merge
:
--ignore-space-change
--ignore-all-space
--ignore-space-at-eol
Assurez-vous d’ajouter autocrlf = false
et/ou safecrlf = false
au clone Windows (.git/config).
Si vous configurez un outil mergetool comme ceci:
git config mergetool.cp.cmd '/bin/cp -v "$REMOTE" "$MERGED"'
git config mergetool.cp.trustExitCode true
Puis un simple
git mergetool --tool=cp
git mergetool --tool=cp -- paths/to/files.txt
git mergetool --tool=cp -y -- paths/to/files.txt # without prompting
Fera le travail
Dans d'autres cas, je suppose
git checkout HEAD -- path/to/myfile.txt
devrait faire l'affaire
Edit faire l'inverse (parce que vous avez foiré):
git checkout remote/branch_to_merge -- path/to/myfile.txt