web-dev-qa-db-fra.com

Comment conserver le fichier local ou le fichier distant pendant la fusion en utilisant Git et la ligne de commande?

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.

169
e-satis

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.

264
Waiting for Dev...

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

83
keflavich

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.

12
Ben Wilde

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

Utiliser git mergetool

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

Utiliser de simples commandes git

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
9
sehe