2012-06-20 10 views
18

Diciamo che ho un file che èPerché git non tenta di unire le modifiche ai file rinominati?

  1. Modificato in master
  2. modificata in un ramo di caratteristica
  3. Rinominato in un ramo di caratteristica

Quando provo ad unire fino dal master al funzionalità ramo, unione non riuscita con

CONFLICT (modifica/eliminazione): X eliminato in HEAD e modificato in origine/master. Versione origine/master di X lasciata nell'albero.

Comprendo che esiste un conflitto, ma perché non tenta nemmeno di unire le modifiche e inserire indicatori di conflitto nel file? Previous answers seem to imply that it should. Tutto ciò che ottengo sono due versioni differenti del file, in cui devo calcolare manualmente la differenza e la porta cambia riga per riga dalla versione principale alla mia versione.

Procedura per riprodurre:

git init 
touch a 
git add a 
git commit -m 'initial import' 

git checkout -b feature1 
echo feature1 > a 
git add a 
git commit -m feature1 
git mv a b 
git commit -m feature1 

git checkout master 
echo bugfix > a 
git add a 
git commit -m bugfix 

git checkout feature1 
git merge master 
+0

Possibile [duplicato] (http://stackoverflow.com/q/2701790/720999) – kostix

risposta

31

Poiché non v'è in realtà il concetto di operazione di ridenominazione di prima classe in git, solo che "rileva" cambia titolo usando una soglia per le differenze di file. I tuoi file sono probabilmente troppo diversi.

Prova la fusione con: git merge master -s recursive -X rename-threshold=5%

+0

Quando inizialmente commettere una ridenominazione, sembra che vi sia già una soglia in uso dal il file rinominato può contenere piccole differenze. Qualche idea sul perché non userebbe la stessa soglia? Mi aspetterei dal momento che ha preso il nome del commit iniziale, dovrebbe mantenerlo in un unione o in un rebase. –

+1

@SeanAdkinson Poiché la strategia di fusione predefinita unisce solo i risultati finali, non tutti i commit. Quindi, se il file è stato modificato in un altro commit dopo la rinomina, potrebbe non soddisfare più la soglia, anche se lo ha fatto prima. – gcscaglia

+0

Si noti che '%' in 'rename-threshold' è cruciale. –

Problemi correlati