जवाबों:
--followएक विशेष फ़ाइल के लिए काम करता है
git log --follow -- filename
दिए गए अन्य समाधानों के लिए अंतर
ध्यान दें कि अन्य समाधानों में git log path(बिना --follow) शामिल हैं। यदि आप किसी निर्देशिका में परिवर्तन जैसे ट्रैक करना चाहते हैं, तो यह तरीका आसान है , लेकिन जब फ़ाइलों का नाम बदला गया ( तब उपयोग --follow filename) तो ठोकर लग जाती है ।
--followrenames लिए खातों, तो यह और अधिक मजबूत की तुलना में हैgit log -- path
--followएक पथ स्वीकार करता है , जो एक फ़ाइल हो सकती है, लेकिन एक निर्देशिका भी। उत्तरार्द्ध के मामले में यह पुनरावर्ती रूप से चलेगा और उस बिंदु से नीचे की सभी फ़ाइलों में परिवर्तन की रिपोर्ट करेगा। (यह व्यवहार मैनपेज में प्रलेखित नहीं है और स्थायी नहीं हो सकता है।)
git log filename?
git log filenameफ़ाइल का नाम बदलने का पालन नहीं करता है, अर्थात यह फ़ाइल नाम (वास्तविक फ़ाइल नहीं) के बारे में सभी कमिट दिखाएगा । यदि आप फ़ाइलें बनाते हैं Xऔर Yदोनों को बदल देते हैं, तो हटा दिया जाता है Yऔर नाम बदल दिया Xजाता है Yऔर फिर उसे बदल भी दिया जाता है, और आप चलाते हैं git log Y, आपको पुराने Y और नए दोनों के लिए संदेश मिलेंगे । और इसके विपरीत, --followआप उस फ़ाइल के बारे में कमिट करेंगे जब यह नाम दिया गया था X और जब यह नाम दिया गया था Y।
git log pathआपको जो चाहिए वो करना चाहिए। से git logआदमी :
[--] <path>…
Show only commits that affect any of the specified paths. To prevent confusion with
options and branch names, paths may need to be prefixed with "-- " to separate them
from options or refnames.
मैं इसे करीब से देख रहा हूं और ये सभी जवाब मुझे वास्तव में सभी शाखाओं में सभी कमिट्स नहीं दिखाते हैं।
यहाँ मैं gitk एडिट व्यू विकल्पों के साथ खिलवाड़ करके आया हूँ। यह मुझे शाखा, स्थानीय, फिर से लिखना, और दूरस्थ की परवाह किए बिना एक फ़ाइल के लिए सभी आवागमन दिखाता है ।
gitk --all --first-parent --remotes --reflog --author-date-order -- filename
यह भी साथ काम करता है git log:
git log --all --first-parent --remotes --reflog --author-date-order -- filename
--reflogशामिल हैं, जो छूट / संशोधित या अन्यथा खारिज कर दिया गया था। शायद यह स्पष्ट होना चाहिए, लेकिन मैंने इसके साथ उपयोग करने की कोशिश की git logऔर यह पता लगाने की कोशिश कर रहा था कि मैं क्यों प्रतीत होता है कि नकल कर रहा था!
एक विशिष्ट फ़ाइल के लिए कमिट प्राप्त करने के लिए नीचे दिए गए कमांड का उपयोग करें:
git log -p filename
git log -p mybranch -- filenameया git log --all -- filenameसभी शाखाओं में देखने के लिए उपयोग कर सकते हैं ।
यह जितना सरल होना चाहिए git log <somepath>; मैनपेज की जांच करें ( git-log(1))।
व्यक्तिगत रूप से मुझे उपयोग करना पसंद है git log --stat <path>इसलिए मैं फ़ाइल पर प्रत्येक कमिट का प्रभाव देख सकता हूं।
-pअगर आप पूर्ण अंतर को देखना चाहते हैं, तो यह नहीं कि इसमें कुछ संख्याओं को संशोधित किया गया था।
git showविशिष्ट कॉमेट्स पर जो वे बात करते हैं, जैसे दिखते हैं।
वैकल्पिक रूप से (Git 1.8.4 के बाद से), यह केवल उन सभी कमिटों को प्राप्त करने के लिए संभव है, जिन्होंने किसी फ़ाइल का एक विशिष्ट भाग बदल दिया है । आप इसे शुरुआती लाइन और अंतिम पंक्ति संख्या को पास करके प्राप्त कर सकते हैं।
लौटाया गया परिणाम इस विशेष भाग को संशोधित करने वाले कमिट की सूची होगा। आदेश इस प्रकार है:
git log --pretty=short -u -L <upperLimit>,<lowerLimit>:<path_to_filename>
कहाँ upperLimitहै start_line_numberऔर lowerLimitएक हैending_line_number
अधिक जानकारी - https://www.techpurohit.com/list-some-useful-git-commands
जैसा कि jackrabb1t ने बताया है, --followयह अधिक मजबूत है क्योंकि यह नाम / चाल से परे इतिहास को सूचीबद्ध करना जारी रखता है। इसलिए, यदि आप एक ऐसी फ़ाइल की तलाश कर रहे हैं, जो वर्तमान में एक ही पथ में नहीं है या एक फ़ाइल जिसे विभिन्न हिट्स में बदला गया है, तो - इसे ट्रैक करेगा।
यदि आप नाम / पथ परिवर्तन की कल्पना करना चाहते हैं तो यह एक बेहतर विकल्प हो सकता है:
git log --follow --name-status -- <path>
लेकिन अगर आप केवल उन मामलों के साथ एक अधिक कॉम्पैक्ट सूची चाहते हैं:
git log --follow --name-status --format='%H' -- <path>
या और भी
git log --follow --name-only --format='%H' -- <path>
नकारात्मक पक्ष यह है कि --followकेवल एक फ़ाइल के लिए काम करता है।
--followएक पथ के लिए काम करता है , जो एक निर्देशिका हो सकती है। यदि कोई निर्देशिका पारित करता है तो वह पुनरावर्ती रूप से चलेगा और उस बिंदु से नीचे की सभी फ़ाइलों में परिवर्तन की रिपोर्ट करेगा।
यदि आप पिछले कमिट उपयोग में हटाई गई फ़ाइल को बंद करने का प्रयास कर रहे हैं
git log --follow -- filename
gitnewbies: उपयोग git log -p --follow -- filenameके साथ-साथ प्रदर्शित करने के लिए परिवर्तन। यह भी ध्यान दें: "फ़ाइलनाम" एक फ़ाइल, एक निर्देशिका या एक सबमॉड्यूल हो सकता है।
यदि आप उन सभी कमिटों को देखना चाहते हैं जो एक फाइल को बदल दिया है, सभी शाखाओं में, इसका उपयोग करें:
git log --follow --all <filepath>
यदि आप कमिट में किए गए सभी परिवर्तनों को देखना चाहते हैं जो एक विशेष फ़ाइल को बदल दिया है (केवल फ़ाइल में केवल परिवर्तनों के बजाय), तो आप निम्न कर सकते हैं --full-diff:
git log -p --full-diff [branch] -- <path>
[branch]
gitk <path_to_filename>
पैकेज मानते हुए "gitk" पहले से ही स्थापित है।
यदि यह स्थापित नहीं है, तो यह करें:
sudo apt-get install gitk
और फिर उपरोक्त कमांड का प्रयास करें। यह लिनक्स के लिए है ... यदि वे GUI चाहते हैं तो यह लिनक्स उपयोगकर्ताओं की मदद कर सकता है।
gitkविंडोज के लिए Git के साथ बंडल किया गया है।
बस हैश उपयोग की एक सूची प्राप्त करने के लिए git rev-list
git rev-list HEAD <filename>
आउटपुट:
b7c4f0d7ebc3e4c61155c76b5ebc940e697600b1
e3920ac6c08a4502d1c27cea157750bd978b6443
ea62422870ea51ef21d1629420c6441927b0d3ea
4b1eb462b74c309053909ab83451e42a7239c0db
4df2b0b581e55f3d41381f035c0c2c9bd31ee98d
जिसका मतलब है कि 5 कमिट्स ने इस फाइल को छुआ है। यह रिवर्स कालानुक्रमिक क्रम है, इसलिए सूची में पहला प्रतिबद्ध b7c4f0d7सबसे हाल का है।
लिनक्स पर आप इसके लिए gitk का उपयोग कर सकते हैं।
इसे "sudo apt-get install git-gui gitk" का उपयोग करके इंस्टॉल किया जा सकता है। इसका उपयोग "gitk <Filename>" द्वारा एक विशिष्ट फ़ाइल के कमिट्स को देखने के लिए किया जा सकता है।
# Shows commit history with patch
git log -p -<no_of_commits> --follow <file_name>
# Shows brief details like "1 file changed, 6 insertions(+), 1 deletion(-)"
git log --stat --follow <file_name>