Perché "git log -‌- foo" non funziona per il file cancellato foo?


89

Il mio repository ha subito modifiche come:

  1. ... alcuni commit non correlati ...
  2. Eseguire il commit di un nuovo file foocon 100 righe di contenuto
  3. ... intervenendo si impegna, alcuni dei quali touch foo...
  4. Inserisci il contenuto di fooall'inizio di un file esistente bare git rm foonello stesso commit
  5. ... altri commit non correlati ...

Ora voglio vedere il registro del file cancellato foo. Tutto quello che ho letto, anche su SO, dice che dovrei essere in grado di farlo git log -- foo, ma quel comando non produce output.

Se trovo il commit che include l'eliminazione fooposso git log 1234abcd -- fooe vedere il suo registro, quindi penso che il mio percorso verso foonon sia il problema. Nota anche che gli git merge-base HEAD 1234abcdoutput 1234abcd[...], quindi penso che dovrebbe dimostrare che il commit è raggiungibile da HEAD. Nota che non c'è alcun file foonel mio albero di lavoro (ovvio, poiché è stato cancellato). Utilizzo di Git 1.7.1.1 su OS X.

Perché non git log -- foofunziona per me e come posso risolverlo? Grazie!


5
Hai provato git log --follow -- fooo git log --follow -M -- foo? (per forzare il rilevamento della ridenominazione)
VonC

1
Merda, ci ho provato, --followma leggendo historyvedo che da quando l'ho provato avevo cd da qualche altra parte, rendendo il percorso non valido. git log --follow -- fooha funzionato quando ho provato dal punto di partenza giusto. Immagino che Git abbia considerato il roll foointo barcome una sorta di rinomina? In ogni caso grazie! Sarò felice di accreditarlo se lo ripubblicherai come risposta.
user385804

1
Fastidioso che --viene cambiato nel titolo della domanda ...
Cascabel

Risposte:


118

Si desidera utilizzare l' --followopzione su git log, che è descritta nella pagina man come:

Continue listing the history of a file beyond renames.

In effetti, questo non solo consente di vedere la cronologia di un file rinominato, ma consente anche di visualizzare la cronologia di un file non più nell'albero di lavoro. Quindi il comando che dovresti usare dovrebbe essere simile a:

git log --follow -- foo

Aggiornare:

Git 2.9+ ora lo ha abilitato di default per tutti i comandi git diffe git log:

I comandi a livello di porcellana dell'utente finale nella famiglia "git diff" e "git log" abilitano per impostazione predefinita il rilevamento della ridenominazione; puoi ancora usare la variabile di configurazione "diff.renames" per disabilitarla.

Grazie a x-yuri per l'avviso!


1
Ha funzionato per me senza la --followparte. Avevo solo bisogno di aggiungere --. Io corro git-2.9.0.
x-yuri
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.