जवाबों:
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.
तो, डॉक्स git log
इसके बजाय का उपयोग करने के लिए प्रोत्साहित करते हैं git whatchanged
; यह अंतिम कमांड git लॉग का -no-मर्ज विकल्प का भी उपयोग करता है, इसलिए वे उसी परिणाम को आउटपुट करते हैं।
git whatchanged
वर्तमान नवीनतम संस्करण 2.21.0 के रूप में निकाला गया है। सभी git whatchanged
हासिल किया जा सकता है git log
और यह केवल ऐतिहासिक कारणों से संरक्षित है। विवरण देखें git-scm.com/docs/git-whatchanged/2.21.0
पिछले सुझावों में कुछ कमियां हैं। मूल रूप से, मैं कुछ के बराबर देख रहा था cvs diff -D"1 day ago" -D"2010-02-29 11:11"
। अधिक से अधिक जानकारी एकत्र करते हुए, मुझे एक समाधान मिला।
चीजें जो मैंने कोशिश की हैं:
git whatchanged --since="1 day ago" -p
से यहाँ
लेकिन यह प्रत्येक कमिट के लिए एक भिन्नता देता है, भले ही एक फाइल में कई कमिट हों। मुझे पता है कि "डेट" जीट में एक ढीली अवधारणा है , मैंने सोचा कि ऐसा करने का कोई तरीका होना चाहिए।
git diff 'master@{1 day ago}..master
कुछ चेतावनी देता है warning: Log for 'master' only goes back to Tue, 16 Mar 2010 14:17:32 +0100.
और सभी भिन्न नहीं दिखाता है।
git format-patch --since=yesterday --stdout
मेरे लिए कुछ नहीं देता।
revs=$(git log --pretty="format:%H" --since="1 day ago");git diff $(echo "$revs"|tail -n1) $(echo "$revs"|head -n1)
किसी तरह काम करता है, लेकिन जटिल लगता है और वर्तमान शाखा तक सीमित नहीं है।
आखिरकार:
git diff $(git rev-list -n1 --before="1 day ago" master)
काम करने के लिए लगता है और इसी तरह की चीजों को करने के लिए एक डिफ़ॉल्ट तरीका है , हालांकि मैंने जितना सोचा था उससे अधिक जटिल है।मजेदार रूप से, git-cvsserver "cvs diff -D" का समर्थन नहीं करता है (इसके बिना यह कहीं पर प्रलेखित है)।
git rev-list
, जो मेरे द्वारा देखी जा रही समान समस्या को हल करने की दिशा में एक लंबा रास्ता तय किया।
git diff 'master@{1 day ago}..master
वाक्य रचना का अर्थ है "जाँच reflog जहां शाखा बाहर और आंकड़ा master
बात करने के लिए प्रयोग किया जाता है अपने स्थानीय भंडार में 1 day ago
"। विशेष रूप से, वर्तमान शाखा के वास्तविक प्रतिबद्ध इतिहास का उपयोग नहीं करेगा master
। यह बहुत ही कम चीज है जो आप वास्तव में चाहते हैं।
"तारीख" गिट में एक ढीली अवधारणा का एक सा है। एक कमिट में एक लेखक की तारीख होगी जो अतीत में कुछ समय अच्छी तरह से हो सकती है, इससे पहले कि कोई वास्तव में अपनी रिपॉजिटरी में कमिट करता है / कमिट करता है, यह भी कि कमिट रिबेड किया जा सकता है और एक स्पष्ट रूप से नए कमिट के शीर्ष पर होने के लिए अद्यतन किया जा सकता है।
एक कमिट में एक कमिट डेट भी होती है जिसे अपडेट किया जाता है अगर किसी कमिट को किसी भी तरह से रिबेड या संशोधित किया जाता है। ये कमिटमेंट कुछ हद तक कालानुक्रमिक क्रम में होने की संभावना है, लेकिन आप अभी भी कमिटर की दया पर उसके कंप्यूटर पर सही समय निर्धारित कर रहे हैं और यहां तक कि एक अनमॉडिटेड कमिटमेंट एक रिमोट रिपॉजिटरी पर फीचर शाखा में अनिश्चित काल के पहले बैठ सकता है। एक केंद्रीय भंडार के मास्टर शाखा में विलय किया जा रहा है।
आपके उद्देश्यों के लिए संभवतः सबसे उपयोगी क्या है प्रश्न में विशेष भंडार पर रिफॉल्ग तिथि। यदि आपके पास प्रति-शाखा रिफॉल्ज़ सक्षम (देखें git config core.logAllRefUpdates
) हैं, तो आप यह निर्दिष्ट करने के लिए ref@{date}
सिंटैक्स का उपयोग कर सकते हैं कि किसी विशेष समय में शाखा कहाँ थी।
उदाहरण के लिए
git log -p master@{2009-07-01}..master@{now}
आप 'फजी' वर्णनों का भी उपयोग कर सकते हैं जैसे:
git log -p "master@{1 month ago}..master@{yesterday}"
ये आदेश सभी कमिट को दिखाएंगे कि रिपॉजिटरी की दी गई शाखा में 'दिखाई' दिए गए हैं, चाहे वे कितने भी पुराने हों, वे वास्तव में अपने लेखक और प्रतिबद्ध तारीखों के अनुसार हैं।
ध्यान दें कि प्रति-शाखा परिशोधक एक रिपॉजिटरी के लिए विशिष्ट है, इसलिए यदि आप क्लोन पर लॉग कमांड चला रहे हैं, और आप एक महीने के लिए (कहते हैं) नहीं खींचते हैं तो पिछले महीने के सभी परिवर्तनों को एक बार में खींच लें। फिर पिछले महीने के सभी परिवर्तन एक @{1 hour ago}..@{now}
सीमा में दिखाई देंगे । यदि आप 'सेंट्रल' रिपॉजिटरी पर लॉग कमांड को चलाने में सक्षम हैं जिसे लोग पुश करते हैं, तो यह वह कर सकता है जो आप चाहते हैं।
@{time spec}
सिंटैक्स हमेशा आपके स्थानीय रिफ्लॉग को संदर्भित करता है । यह वास्तविक प्रतिबद्ध इतिहास (डीएजी) का उल्लेख नहीं करता है। यदि आप अंतर को नहीं समझते हैं, तो इस वाक्यविन्यास का उपयोग न करें!
git diff --stat @{2013-11-01}..@{2013-11-30}
या
git diff --stat @{2.weeks.ago}..@{last.week}
@{time spec}
सिंटैक्स हमेशा आपके स्थानीय रिफ्लॉग को संदर्भित करता है । यह वास्तविक प्रतिबद्ध इतिहास (डीएजी) का उल्लेख नहीं करता है। यदि आप अंतर को नहीं समझते हैं, तो इस वाक्यविन्यास का उपयोग न करें!
शायद
$ git format-patch --committer=<who> --since=yesterday --stdout
क्या है जो आप चाहते हैं ('या' बिना रुके)?
मेरा मानना है कि सामान्य समाधान का उपयोग करना है:
git rev-list -n1 --first-parent --until=<a date string> <a ref>
बिना -फर्स्ट-पैरेंट के, आपको एक शाखा से एक कमिट मिल सकती है जिसे बाद में मर्ज a ref
कर दिया गया था लेकिन इसमें विलय नहीं किया गया था a date string
।
यहाँ एक विकल्प का उपयोग कर रहा है --children
और grep
इसके बजाय -n1
:
mlm_git_ref_as_of() {
# # Examples #
#
# Show all commits between two dates:
#
# git log $(mlm_git_ref_as_of '2012-05-21 09:00:00-0400')..$(mlm_git_ref_as_of '2012-05-21 17:00:00-0400')
#
# Show diffs of all commits between two dates:
#
# git diff $(mlm_git_ref_as_of '2012-05-21 09:00:00-0400')..$(mlm_git_ref_as_of '2012-05-21 17:00:00-0400')
local as_of="$1"
local ref="${2:-HEAD}"
# Get the most recent commit (--children, grep -v ' ') that was on
# the given branch ($ref, --first-parent) as of a given date
# ($as_of)
git rev-list --children --first-parent --until="$as_of" "$ref" | grep -v ' '
}
मैं git whatchanged
इस प्रश्नोत्तर को पढ़ने से पहले परिचित नहीं था , लेकिन यह मेरे लिए बहुत अलग परिणाम देता है, इसलिए मुझे यकीन नहीं है कि यह क्या कर रहा है।
एक और सरल तरीका है कि आप एक निश्चित तिथि के बाद से सभी परिवर्तनों का एक हिस्सा प्राप्त कर सकते हैं, बस X
उस तारीख को या उसके बाद होने वाले पहले कमिट को ढूंढना है , फिर उपयोग करें
git diff X
इसका लाभ यह है कि यह एक ताज़ा क्लोन में रीफ़्लॉग प्रविष्टियों पर निर्भर नहीं करता है, इसके विपरीत
git diff <reference>@{n}..
git log <reference>@{n}..
में समाधान
आप पैच (डिफरेंशियल) तैयार करने और ईमेल के माध्यम से भेजने के लिए गिट-फॉर्मेट-पैच का भी उपयोग कर सकते हैं ।
कमिट रेंज निर्दिष्ट करने के लिए [चूंकि] या [संशोधन रेंज] विकल्पों का उपयोग करें।
अपनी शाखा पर डेट से डेट तक के बदलावों को देखने के लिए, निम्न सूत्र का उपयोग करें:
सूत्र :
git checkout <branch>
git pull
git diff --stat @{fromDate}..@a{toDate}
ध्यान दें कि तारीखें YYYY-MM-DD प्रारूप पर हैं:
git diff --stat @{2019-08-20}..@a{2019-08-21}
यदि आप विशिष्ट समय सीमा में विशिष्ट फ़ाइल पर परिवर्तनों का निरीक्षण करना चाहते हैं (कोड में अलग-अलग देखें), तो वर्तमान फ़ाइल को नेविगेट करें:
उदाहरण :
git diff @{2019-01-01}..@{2019-01-02} ~/dev/myApp/package.json
मैं उस तरीके से फेंकूंगा जो मैं करता हूं:
git log
एक तारीख के लिए आपको वर्तमान शाखा के लिए प्रतिबद्ध हैश देता है। फिर मैं बस कुछ का उपयोग करता हूं, git diff 8fgdfg8..565k4l5
जो मुझे फाइलों द्वारा समुचित अंतर देता है। आशा है कि यह मदद करता है, हालांकि बहुत परीक्षण नहीं किया गया है