Sto utilizzando Git per un lungo periodo, ma di recente ho dovuto affrontare il trucco interessante che consente di annullare la cronologia delle modifiche del file durante l'unione. Ecco i passaggi per riprodurre è:Git consente di perdere la cronologia delle modifiche del file durante l'unione con conflitti
Ho il repository git con due file e un commit:
$ git branch
* master
$ git log --oneline
80c8d5a Initial commit
$ git log --oneline -- README
80c8d5a Initial commit
$ ls
README conflict_file
sto creando il nuovo ramo sperimentale e la modifica di file README e conflict_file:
$ checkout -b experiment
Switched to branch 'experiment'
$ vim README
$ vim conflict_file
$ git commit -am "Experimental changes"
[experiment cdbc988] Experimental changes
2 files changed, 2 insertions(+)
$ git log --oneline -- README
cdbc988 Experimental changes
80c8d5a Initial commit
Tornando al ramo principale e modificare conflict_file (per avere il conflitto durante il merge):
$ git checkout master
Switched to branch 'master'
$ vim conflict_file
$ git commit -am "Master changes"
[master ad8b68e] Master changes
1 file changed, 1 insertion(+)
Lo stato del mio repository nei seguenti:
$ git log --oneline --decorate --graph --all
* ad8b68e (HEAD, master) Master changes
| * cdbc988 (experiment) Experimental changes
|/
* 80c8d5a Initial commit
Cercando di fondersi con il ramo sperimentale:
$ git merge experiment
Auto-merging conflict_file
CONFLICT (content): Merge conflict in conflict_file
Automatic merge failed; fix conflicts and then commit the result.
$ git mergetool
<merging conflict in conflict_file>
Ecco il trucco:
$ git reset HEAD README
Unstaged changes after reset:
M README
$ git commit
[master 909139f] Merge branch 'experiment'
$ git log --oneline -- README
80c8d5a Initial commit
ho perso le modifiche e cronologia del file README introdotto nel ramo sperimentaleModifiche sperimentali commit. Qualcuno potrebbe commentare come è correlato all'idea che Git conosca tutti i cambiamenti? È possibile evitare questo scenario? Potrebbe diventare un problema nella nostra azienda, perché l'operazione di unione è consentita per gli sviluppatori, ma potrebbero rimuovere per errore le modifiche di qualcuno.
Prova l'opzione '--full-history' a' git log'. Leggi anche la pagina man relativa a _history simplification_: "Modalità predefinita ... la storia più semplice che spiega lo stato finale dell'albero." – chirlu
Perché sei sorpreso che le modifiche al file 'README' siano finite? hai richiesto esplicitamente che si verifichi con 'git reset HEAD README'. – Chronial
Invocazione di 'git log --follow -' helpen me –
erkfel