मैं उन सभी कमियों को कैसे सूचीबद्ध कर सकता हूं जिन्होंने एक विशिष्ट फ़ाइल को बदल दिया है?


800

क्या सभी तरीकों को सूचीबद्ध करने का एक तरीका है जो एक विशिष्ट फ़ाइल को बदल दिया है?


1
क्या आप किसी एकल शाखा में फ़ाइल में परिवर्तन देख रहे हैं; सभी स्थानीय शाखाओं में; एक रिमोट पर सभी शाखाओं के पार; या इसके पार? मुझे लगता है कि यह सब एक स्क्रिप्ट की आवश्यकता होगी।
बेन्हॉर्गन

जवाबों:


1079

--followएक विशेष फ़ाइल के लिए काम करता है

git log --follow -- filename

दिए गए अन्य समाधानों के लिए अंतर

ध्यान दें कि अन्य समाधानों में git log path(बिना --follow) शामिल हैं। यदि आप किसी निर्देशिका में परिवर्तन जैसे ट्रैक करना चाहते हैं, तो यह तरीका आसान है , लेकिन जब फ़ाइलों का नाम बदला गया ( तब उपयोग --follow filename) तो ठोकर लग जाती है


32
+1 --followrenames लिए खातों, तो यह और अधिक मजबूत की तुलना में हैgit log -- path
Gabe Moothart

42
ध्यान दें कि --followएक पथ स्वीकार करता है , जो एक फ़ाइल हो सकती है, लेकिन एक निर्देशिका भी। उत्तरार्द्ध के मामले में यह पुनरावर्ती रूप से चलेगा और उस बिंदु से नीचे की सभी फ़ाइलों में परिवर्तन की रिपोर्ट करेगा। (यह व्यवहार मैनपेज में प्रलेखित नहीं है और स्थायी नहीं हो सकता है।)
StvnW

5
उस एक और बस के बीच के अंतर को git log filename?
समझें

8
@SaulOrtega, git log filenameफ़ाइल का नाम बदलने का पालन नहीं करता है, अर्थात यह फ़ाइल नाम (वास्तविक फ़ाइल नहीं) के बारे में सभी कमिट दिखाएगा । यदि आप फ़ाइलें बनाते हैं Xऔर Yदोनों को बदल देते हैं, तो हटा दिया जाता है Yऔर नाम बदल दिया Xजाता है Yऔर फिर उसे बदल भी दिया जाता है, और आप चलाते हैं git log Y, आपको पुराने Y और नए दोनों के लिए संदेश मिलेंगे । और इसके विपरीत, --followआप उस फ़ाइल के बारे में कमिट करेंगे जब यह नाम दिया गया था X और जब यह नाम दिया गया था Y
मार्सॉफ्ट

7
सभी शाखाओं में सभी कमिट को देखने के लिए "git log --all filename" का उपयोग करें
Lebnik

122

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.

11
यदि फ़ाइल का मार्ग बदल गया है तो काम नहीं करता है। इस मामले के लिए जैकबबिट का जवाब काम करता है।
kwahn

1
यह काम करता है यदि आपको लॉग को एक विशिष्ट शाखा में सीमित करने की आवश्यकता है
ams

63

मैं इसे करीब से देख रहा हूं और ये सभी जवाब मुझे वास्तव में सभी शाखाओं में सभी कमिट्स नहीं दिखाते हैं।

यहाँ मैं gitk एडिट व्यू विकल्पों के साथ खिलवाड़ करके आया हूँ। यह मुझे शाखा, स्थानीय, फिर से लिखना, और दूरस्थ की परवाह किए बिना एक फ़ाइल के लिए सभी आवागमन दिखाता है ।

gitk --all --first-parent --remotes --reflog --author-date-order -- filename

यह भी साथ काम करता है git log:

git log --all --first-parent --remotes --reflog --author-date-order -- filename

11
यह तब सही होता है जब कोई बदलाव करता है, लेकिन वे भूल जाते हैं कि उन्होंने बदलाव कहां से किया है।
EarthmeLon

2
बहुत उपयोगी। इसमें
स्टैट्स

यह पसंदीदा उत्तर होना चाहिए। सवाल यह था कि सभी कमिट्स को खोजा जाए।
carl verbiest

वह नोटिस जिसमें --reflogशामिल हैं, जो छूट / संशोधित या अन्यथा खारिज कर दिया गया था। शायद यह स्पष्ट होना चाहिए, लेकिन मैंने इसके साथ उपयोग करने की कोशिश की git logऔर यह पता लगाने की कोशिश कर रहा था कि मैं क्यों प्रतीत होता है कि नकल कर रहा था!
बजे सोरेन ब्योर्नस्टैड

43

एक विशिष्ट फ़ाइल के लिए कमिट प्राप्त करने के लिए नीचे दिए गए कमांड का उपयोग करें:

git log -p filename

8
मैं समझता हूं कि यह सवाल का ठीक से जवाब नहीं देता क्योंकि वह कमिट की सूची चाहता था लेकिन यह सोना है और मेरी फाइल में जा रहा है।
16

3
यदि फाइल वर्तमान में चेक-आउट शाखा में मौजूद नहीं है तो यह बिल्कुल भी काम नहीं करेगा। आप शाखा को जोड़ सकते हैं जैसे git log -p mybranch -- filenameया git log --all -- filenameसभी शाखाओं में देखने के लिए उपयोग कर सकते हैं ।
सोरेन ब्योर्नस्टैड

37

यह जितना सरल होना चाहिए git log <somepath>; मैनपेज की जांच करें ( git-log(1))।

व्यक्तिगत रूप से मुझे उपयोग करना पसंद है git log --stat <path>इसलिए मैं फ़ाइल पर प्रत्येक कमिट का प्रभाव देख सकता हूं।


9
या यहां तक ​​कि -pअगर आप पूर्ण अंतर को देखना चाहते हैं, तो यह नहीं कि इसमें कुछ संख्याओं को संशोधित किया गया था।
कास्कैबेल

सच है, लेकिन यह बहुत शोर है कि ज्यादातर फाइलों को उनके जीवन में कई बार बदल दिया गया है। मैं हर एक कमेटी का पूर्ण रूप देखना नहीं चाहता जो कभी किसी फाइल को छूती हो। मैं आमतौर पर एक विशिष्ट चीज की तलाश में हूं, इसलिए मैं सिर्फ प्रभावों के साथ एक लॉग प्राप्त कर सकता हूं और फिर git showविशिष्ट कॉमेट्स पर जो वे बात करते हैं, जैसे दिखते हैं।
rfunduk

git log --stat --follow - * .html => प्रत्येक कमिट में एक फाइल के साथ कमिट की आउटपुट सूची। बहुत अच्छा!
सर्जियो बेलेवस्कीज

18

वैकल्पिक रूप से (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


17

जैसा कि 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केवल एक फ़ाइल के लिए काम करता है।


4
--followएक पथ के लिए काम करता है , जो एक निर्देशिका हो सकती है। यदि कोई निर्देशिका पारित करता है तो वह पुनरावर्ती रूप से चलेगा और उस बिंदु से नीचे की सभी फ़ाइलों में परिवर्तन की रिपोर्ट करेगा।
स्टैनव्यू

10

यदि आप पिछले कमिट उपयोग में हटाई गई फ़ाइल को बंद करने का प्रयास कर रहे हैं

git log --follow -- filename

3
के लिए gitnewbies: उपयोग git log -p --follow -- filenameके साथ-साथ प्रदर्शित करने के लिए परिवर्तन। यह भी ध्यान दें: "फ़ाइलनाम" एक फ़ाइल, एक निर्देशिका या एक सबमॉड्यूल हो सकता है।
तिनो

8

यदि आप उन सभी कमिटों को देखना चाहते हैं जो एक फाइल को बदल दिया है, सभी शाखाओं में, इसका उपयोग करें:

git log --follow --all <filepath>

8

आपके द्वारा सभी करता देखने के लिए चाहते हैं filenameऔर से नहीं filepath , उपयोग करें:

git log --all -- '*.wmv'

6

यदि आप कमिट में किए गए सभी परिवर्तनों को देखना चाहते हैं जो एक विशेष फ़ाइल को बदल दिया है (केवल फ़ाइल में केवल परिवर्तनों के बजाय), तो आप निम्न कर सकते हैं --full-diff:

git log -p --full-diff [branch] -- <path>

या बिना[branch]
एंथ्रोपिक

1
@Anentropic वर्ग कोष्ठकों को इंगित करना चाहिए था कि तर्क वैकल्पिक है।
घन

यह वह सब है जिसकी मुझे आवश्यकता है, यह पूर्ण परिवर्तन दिखाता है, मर्ज से कुछ परिवर्तन भी शामिल है।
थनहल्द

5

सभी शाखाओं में git log --all <filename>प्रभावित करने वाले कमिट्स देखने के लिए उपयोग करें <filename>


4
gitk <path_to_filename>

पैकेज मानते हुए "gitk" पहले से ही स्थापित है।

यदि यह स्थापित नहीं है, तो यह करें:

sudo apt-get install gitk

और फिर उपरोक्त कमांड का प्रयास करें। यह लिनक्स के लिए है ... यदि वे GUI चाहते हैं तो यह लिनक्स उपयोगकर्ताओं की मदद कर सकता है।


विंडोज उपयोगकर्ताओं के लिए, ध्यान दें कि gitkविंडोज के लिए Git के साथ बंडल किया गया है।
सोरेन ब्योर्नस्टैड

2

बस हैश उपयोग की एक सूची प्राप्त करने के लिए git rev-list

 git rev-list HEAD <filename>

आउटपुट:

b7c4f0d7ebc3e4c61155c76b5ebc940e697600b1
e3920ac6c08a4502d1c27cea157750bd978b6443
ea62422870ea51ef21d1629420c6441927b0d3ea
4b1eb462b74c309053909ab83451e42a7239c0db
4df2b0b581e55f3d41381f035c0c2c9bd31ee98d

जिसका मतलब है कि 5 कमिट्स ने इस फाइल को छुआ है। यह रिवर्स कालानुक्रमिक क्रम है, इसलिए सूची में पहला प्रतिबद्ध b7c4f0d7सबसे हाल का है।


1

लिनक्स पर आप इसके लिए gitk का उपयोग कर सकते हैं।

इसे "sudo apt-get install git-gui gitk" का उपयोग करके इंस्टॉल किया जा सकता है। इसका उपयोग "gitk <Filename>" द्वारा एक विशिष्ट फ़ाइल के कमिट्स को देखने के लिए किया जा सकता है।


1
# 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>

संदर्भ

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.