Kısa cevap:
git log --full-history -- your_file
repo tarihinizdeki, birleştirilen birleştirme taahhütleri de dahil olmak üzere tüm taahhütleri gösterecektir your_file. Sonuncusu (üstte) dosyayı silen dosyadır.
Bazı açıklamalar:
Buradaki --full-historybayrak önemlidir. Bu olmadan Git, bir dosyanın günlüğünü istediğinde "geçmiş sadeleştirmesi" gerçekleştirir. Dokümanlar tam olarak bunun nasıl çalıştığı hakkında ayrıntılara ışık tutuyor ve kaynak koddan anlamaya çalışmak için gerekli olan cesaret ve cesaretten yoksun, ama git-log dokümanlar söyleyecek çok şey var:
Varsayılan mod
Tarihi, ağacın son durumunu açıklayan en basit tarihe sadeleştirir. En basittir, çünkü sonuç sonucu aynıysa bazı yan dalları budanır (yani aynı içeriğe sahip dalları birleştirmek)
Açıkçası, geçmişini istediğimiz dosyanın silinmesi ile ilgilidir , çünkü silinen bir dosyanın son durumunu açıklayan en basit tarih geçmiş değildir . git logOlmadan --full-historysadece dosyanın asla oluşturulmadığını iddia etme riski var mı ? Maalesef evet. İşte bir gösteri:
mark@lunchbox:~/example$ git init
Initialised empty Git repository in /home/mark/example/.git/
mark@lunchbox:~/example$ touch foo && git add foo && git commit -m "Added foo"
[master (root-commit) ddff7a7] Added foo
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 foo
mark@lunchbox:~/example$ git checkout -b newbranch
Switched to a new branch 'newbranch'
mark@lunchbox:~/example$ touch bar && git add bar && git commit -m "Added bar"
[newbranch 7f9299a] Added bar
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 bar
mark@lunchbox:~/example$ git checkout master
Switched to branch 'master'
mark@lunchbox:~/example$ git rm foo && git commit -m "Deleted foo"
rm 'foo'
[master 7740344] Deleted foo
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 foo
mark@lunchbox:~/example$ git checkout newbranch
Switched to branch 'newbranch'
mark@lunchbox:~/example$ git rm bar && git commit -m "Deleted bar"
rm 'bar'
[newbranch 873ed35] Deleted bar
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 bar
mark@lunchbox:~/example$ git checkout master
Switched to branch 'master'
mark@lunchbox:~/example$ git merge newbranch
Already up-to-date!
Merge made by the 'recursive' strategy.
mark@lunchbox:~/example$ git log -- foo
commit 77403443a13a93073289f95a782307b1ebc21162
Author: Mark Amery
Date: Tue Jan 12 22:50:50 2016 +0000
Deleted foo
commit ddff7a78068aefb7a4d19c82e718099cf57be694
Author: Mark Amery
Date: Tue Jan 12 22:50:19 2016 +0000
Added foo
mark@lunchbox:~/example$ git log -- bar
mark@lunchbox:~/example$ git log --full-history -- foo
commit 2463e56a21e8ee529a59b63f2c6fcc9914a2b37c
Merge: 7740344 873ed35
Author: Mark Amery
Date: Tue Jan 12 22:51:36 2016 +0000
Merge branch 'newbranch'
commit 77403443a13a93073289f95a782307b1ebc21162
Author: Mark Amery
Date: Tue Jan 12 22:50:50 2016 +0000
Deleted foo
commit ddff7a78068aefb7a4d19c82e718099cf57be694
Author: Mark Amery
Date: Tue Jan 12 22:50:19 2016 +0000
Added foo
mark@lunchbox:~/example$ git log --full-history -- bar
commit 873ed352c5e0f296b26d1582b3b0b2d99e40d37c
Author: Mark Amery
Date: Tue Jan 12 22:51:29 2016 +0000
Deleted bar
commit 7f9299a80cc9114bf9f415e1e9a849f5d02f94ec
Author: Mark Amery
Date: Tue Jan 12 22:50:38 2016 +0000
Added bar
git log -- barYukarıdaki terminal dökümünde kelimenin tam anlamıyla nasıl çıkış olmadığına dikkat edin ; Git tarihi barhiç olmadığı bir kurguya "sadeleştiriyor" . git log --full-history -- bardiğer taraftan, bize yaratan taahhüdü ve silen taahhüdü verir bar.
Açık olmak gerekirse: bu konu sadece teorik değildir. Yalnızca dokümanlara baktım ve --full-historybayrağı keşfettim çünkü git log -- some_filesilinen bir dosyayı izlemeye çalıştığım gerçek bir depoda başarısız oluyordu. Mevcut bir dosyanın mevcut durumunda nasıl olduğunu anlamaya çalıştığınızda, geçmişin basitleştirilmesi bazen yararlı olabilir , ancak bir dosya silme işlemini izlemeye çalışırken, önem verdiğiniz taahhüdü gizleyerek sizi mahvetme olasılığı daha yüksektir . --full-historyBu kullanım durumu için her zaman bayrağı kullanın.