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

je sais comment fusionner la modification en utilisant vimdiff, mais, en supposant que je sais juste que le fichier entier est bon à garder ou à jeter, comment faire?

Je ne veux pas ouvrir vimdiff pour chacun d'eux, je change la commande qui dit "keep local" ou "keep remote".

E. G: j'ai obtenu une fusion avec des fichiers marqués comme changé parce que quelqu'un l'a ouvert sous windows, changer la fin de vie, et puis Commité. En fusionnant, je veux juste garder le mien version et jeter le sien.

je suis aussi intéressé par le contraire: j'ai fait une grosse erreur et je veux accepter le fichier distant, en rejetant mes modifications.

142
demandé sur e-satis 2011-07-11 16:41:08

4 réponses

, Vous pouvez aussi bien le faire:

git checkout --theirs /path/to/file

pour conserver le fichier distant, et:

git checkout --ours /path/to/file

pour conserver le fichier local.

puis git add eux et tout est fait.

Facile, n'est-ce pas? :)

217
répondu Waiting for Dev... 2012-08-19 10:31:24

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 de: résoudre les conflits de fusion Git en faveur de leurs changements lors d'une traction

65
répondu keflavich 2018-02-12 12:12:25

pour le bidule d'extrémité de ligne, se référer à 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)

à l'Aide de git mergetool

si vous configurez un 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

à l'Aide de simples commandes git

dans les autres cas, je suppose

git checkout HEAD -- path/to/myfile.txt

devrait faire l'affaire

Modifier pour faire l'inverse (parce que vous foiré):

git checkout remote/branch_to_merge -- path/to/myfile.txt
8
répondu sehe 2011-07-11 17:52:04

git checkout {branch-name} -- {file-name}

ceci utilisera le fichier de la branche de choix.

j'aime cela parce que posh-git autocomplete fonctionne très bien avec cela. Elle supprime également toute ambiguïté quant à la branche distante et à la branche locale. Et --theirs ne marchait pas pour moi de toute façon.

5
répondu Ben Wilde 2016-06-24 06:26:03