Je me demande s'il existe des outils pour fournir un historique des fichiers plus détaillé, en particulier en ce qui concerne les fusions où our
modifications sont conservées. Ce problème est mieux expliqué avec un exemple.Comment faire pour git fusionner l'histoire ambiguïté/obfuscation avec '--ours'?
Disons que je fait un changement en conflit sur master
et une branche feature
:
git checkout master
<made some change to file.txt>
git commit -a -m "Change on master"
git checkout -b feature
<made conflicting change to file.txt>
git commit -a -m "Change on feature"
Si je fusionne feature
en master
et garder mes modifications à l'aide git checkout --ours file.txt
je reçois des résultats différents pour file.txt
que si je devais fusionner master
en feature
(puis fusionner feature
en master
pour avancer rapidement master
). (Je comprends la fusion --ours
pourrait effectivement ont également été fait par inadvertance avec mergetool
.)
En utilisant git log -p
dans ces deux scénarios, la fusion engage ne rapportez aucun changement file.txt
, mais son contenu sont différents entre les scénarios. Maintenant l'historique des changements de file.txt
a été obscurci et il est devenu difficile de savoir quelle version est dans master
. Je peux exécuter git log -- file.txt
, mais cette solution n'est pas évolutive et nécessite que vous sachiez déjà quels fichiers faisaient partie de la fusion incorrecte.
Si quelqu'un prend la mauvaise décision de fusion, il devient difficile de savoir quels fichiers ont été conservés. Sinon, si une fusion apporte des modifications à un fichier, il est facile de voir cela.
Si quelqu'un d'autre utilise 'git mergetool' et opts pour conserver leurs changements locaux pour chaque conflit, le résultat est le même. J'ai utilisé 'git checkout --ours' pour répliquer (et mieux décrire) le comportement problématique. –
slythfox
@Slythfox Changé ma réponse à peu près complètement. Je n'ai pas réalisé que vous utilisiez cette commande pour la reprocher. – Christopher
Je n'ai pas encore eu l'occasion de jouer avec ça. Auparavant, j'ai trouvé le commit de fusion incorrecte, recomposé, puis utilisé [git ls-files -u] (http://stackoverflow.com/questions/3065650/whats-the-simplest-way-to-git-a -list-of-conflicted-files) pour obtenir une liste de fichiers en conflit, et l'a comparée à la mauvaise fusion pour avoir une idée des fichiers qui étaient en conflit mais conservés comme "les nôtres". Cela semble fonctionner, un peu. J'ai aussi joué avec 'git checkout --patch' pour avoir une idée de ce qui a changé entre la mauvaise fusion et un bon commit connu, ce qui semble être la même idée que 'git diff'. –
slythfox