Atau hanya semua komitmen yang terjadi antara dua tanggal? Di SVN, Anda bisa melakukan sesuatu seperti
svn diff -r{date}:{date}
untuk melakukannya! Sepertinya saya tidak dapat menemukan Git yang setara dengan ini.
Secara khusus, saya sedang menulis skrip untuk mengirimkan email harian dengan semua kode yang dilakukan hari itu dan oleh siapa.
The command is kept primarily for historical reasons; fingers of many people who learned Git long before git log was invented by reading Linux kernel mailing list are trained to type it.
Jadi, dokumen mendorong penggunaangit log
alih-alihgit whatchanged
; perintah terakhir ini juga menggunakan opsi --no-merge dari git log, jadi mereka mengeluarkan hasil yang sama.git whatchanged
tidak digunakan lagi sejak versi terbaru 2.21.0. Semua yanggit whatchanged
dicapai dapat dicapai olehgit log
dan itu hanya dipertahankan karena alasan sejarah. Lihat detil git-scm.com/docs/git-whatchanged/2.21.0Saran sebelumnya memiliki beberapa kekurangan. Pada dasarnya, saya mencari sesuatu yang setara dengan
cvs diff -D"1 day ago" -D"2010-02-29 11:11"
. Saat mengumpulkan lebih banyak informasi, saya menemukan solusi.Hal yang telah saya coba:
git whatchanged --since="1 day ago" -p
dari siniTapi ini memberikan perbedaan untuk setiap komit, meskipun ada beberapa komit dalam satu file. Saya tahu bahwa "kencan" adalah konsep yang agak longgar , saya pikir pasti ada cara untuk melakukan ini.
git diff 'master@{1 day ago}..master
memberikan beberapa peringatanwarning: Log for 'master' only goes back to Tue, 16 Mar 2010 14:17:32 +0100.
dan tidak menampilkan semua diff.git format-patch --since=yesterday --stdout
tidak memberikan apapun untukkurevs=$(git log --pretty="format:%H" --since="1 day ago");git diff $(echo "$revs"|tail -n1) $(echo "$revs"|head -n1)
bekerja entah bagaimana, tetapi tampaknya rumit dan tidak terbatas pada cabang saat ini.Akhirnya:
git diff $(git rev-list -n1 --before="1 day ago" master)
tampaknya berfungsi dan cara default untuk melakukan hal serupa , meskipun lebih rumit dari yang saya kira.Lucunya, git-cvsserver tidak mendukung "cvs diff -D" (tanpanya, ini didokumentasikan di suatu tempat).
sumber
git rev-list
, yang sangat membantu dalam memecahkan masalah yang sangat mirip yang saya lihat.git diff 'master@{1 day ago}..master
sintaks berarti "cek yang reflog dan mencari tahu di mana cabangmaster
digunakan untuk titik dalam repositori lokal Anda1 day ago
". Secara khusus, tidak akan menggunakan sejarah komit aktual dari cabang saat inimaster
. Ini sangat jarang hal yang benar-benar Anda inginkan."date" adalah konsep yang agak longgar di git. Sebuah komit akan memiliki tanggal pembuat yang mungkin beberapa waktu di masa lalu sebelum seseorang benar-benar menarik / melakukan komit ke dalam repositori mereka, juga komit mungkin di-rebased dan diperbarui untuk berada di atas komit yang tampaknya lebih baru.
Komit juga memiliki tanggal komit yang diperbarui jika komit di-rebased atau diubah dengan cara apa pun. Komit ini lebih cenderung berada dalam semacam urutan kronologis tetapi Anda masih bergantung pada pengatur waktu yang memiliki waktu yang tepat yang disetel di komputernya dan meskipun demikian, komit yang tidak dimodifikasi dapat duduk di cabang fitur pada repositori jarak jauh tanpa batas waktu sebelumnya digabung ke dalam cabang master dari repositori pusat.
Apa yang mungkin paling berguna untuk tujuan Anda adalah tanggal reflog pada repositori tertentu yang dimaksud. Jika Anda mengaktifkan reflog per cabang (lihat
git config core.logAllRefUpdates
), Anda dapat menggunakanref@{date}
sintaks untuk merujuk ke lokasi cabang pada waktu tertentu.Misalnya
Anda juga dapat menggunakan deskripsi 'kabur' seperti:
Perintah-perintah ini akan menampilkan semua komit yang telah 'muncul' di cabang tertentu dari repositori terlepas dari seberapa 'tua' mereka sebenarnya menurut pembuat dan tanggal komitnya.
Perhatikan bahwa reflog per cabang khusus untuk repositori, jadi jika Anda menjalankan perintah log pada klon, dan Anda tidak menarik (katakanlah) sebulan, maka tarik semua perubahan untuk bulan terakhir sekaligus, maka semua perubahan bulan lalu akan muncul dalam sebuah
@{1 hour ago}..@{now}
rentang. Jika Anda dapat menjalankan perintah log di repostori 'sentral' yang didorong orang, maka perintah tersebut dapat melakukan apa yang Anda inginkan.sumber
@{time spec}
sintaks selalu mengacu pada reflog lokal Anda . Ini tidak mengacu pada riwayat komit aktual (DAG). Jika Anda tidak memahami perbedaannya, jangan gunakan sintaks ini!atau
sumber
@{time spec}
sintaks selalu mengacu pada reflog lokal Anda . Ini tidak mengacu pada riwayat komit aktual (DAG). Jika Anda tidak memahami perbedaannya, jangan gunakan sintaks ini!Mungkin
apa yang kamu inginkan (dengan atau tanpa '--stdout')?
sumber
Saya yakin solusi umumnya adalah menggunakan:
Tanpa --first-parent, Anda mungkin mendapatkan komit dari cabang yang kemudian digabungkan menjadi
a ref
tetapi belum digabungkan sejaka date string
.Berikut alternatif penggunaan
--children
dangrep
alih-alih-n1
:Saya tidak terbiasa
git whatchanged
sebelum membaca T&J ini, tetapi memberikan hasil yang sangat berbeda untuk saya, jadi saya tidak yakin apa yang dilakukannya.sumber
Cara sederhana lain yang Anda bisa mendapatkan perbedaan dari semua perubahan sejak tanggal tertentu adalah dengan menemukan komit pertama
X
yang terjadi pada atau setelah tanggal itu, lalu gunakanIni memiliki keuntungan karena tidak bergantung pada entri reflog dalam klon baru, tidak seperti
solusi dalam
sumber
Untuk melihat file Git berubah dari tanggal ke tanggal di cabang Anda, gunakan rumus berikut:
Rumus :
Perhatikan bahwa tanggalnya menggunakan format YYYY-MM-DD :
Jika Anda ingin mengamati perubahan pada file tertentu dalam rentang waktu tertentu (perhatikan perbedaan dalam kode), cukup buka file saat ini:
Contoh :
sumber
Ini lebih merupakan jawaban yang lucu, karena kemungkinan ada cara yang lebih baik. Ini akan menampilkan semua hash komit untuk hari ini.
; ·)
sumber
Anda juga dapat menggunakan git-format-patch untuk menyiapkan patch (diffs) dan mengirimkannya melalui email.
Gunakan opsi [karena] atau [rentang revisi] untuk menentukan rentang komit.
sumber
Saya akan memberikan cara saya melakukannya:
git log
untuk tanggal memberi Anda melakukan hash untuk cabang saat ini. Lalu saya hanya menggunakan sesuatu sepertigit diff 8fgdfg8..565k4l5
yang memberi saya perbedaan yang tepat dikumpulkan oleh file. Semoga ini bisa membantu, meskipun tidak banyak diujisumber