सवाल गिट संस्करण का उपयोग कर फ़ाइल का परिवर्तन इतिहास देखें


मैं गिट में एक व्यक्तिगत फ़ाइल के परिवर्तन इतिहास को कैसे देख सकता हूं, क्या बदल गया है इसके साथ पूरा विवरण?

मुझे अब तक मिल गया है:

git log -- [filename]

जो मुझे फ़ाइल का प्रतिबद्ध इतिहास दिखाता है, लेकिन मैं प्रत्येक फ़ाइल परिवर्तन की सामग्री पर कैसे प्राप्त करूं?

मैं एमएस सोर्ससेफ से संक्रमण करने की कोशिश कर रहा हूं और यह एक साधारण होता था right-click → show history


2510
2017-11-10 15:42


मूल


उपर्युक्त लिंक अब मान्य नहीं है। यह लिंक आज काम कर रहा है: गिट सामुदायिक पुस्तक - chris


जवाब:


इसके लिए मैं उपयोग करूंगा:

gitk [filename]

या पिछले नाम फ़ाइल नाम का पालन करने के लिए

gitk --follow [filename]

1951
2017-08-24 12:05



लेकिन मेरे पास एक उपकरण भी है जो उपरोक्त को 'गिट दोष' के साथ जोड़ता है जिससे मुझे फ़ाइल के स्रोत को ब्राउज़ करने की अनुमति मिलती है क्योंकि यह समय में बदलती है ... - Egon Willighagen
दुर्भाग्यवश, यह पिछले नामों के फ़ाइल के इतिहास का पालन नहीं करता है। - Dan Moulding
मैं उन फ़ाइलों के इतिहास की भी तलाश कर रहा था जिन्हें पहले नाम दिया गया था और यह धागा पहले पाया गया था। समाधान "गिट लॉग - फॉलो <फ़ाइल नाम>" का उपयोग करना है क्योंकि फिल ने बताया यहाँ। - Florian Gutmann
लेखक कमांड लाइन उपकरण की तलाश में था। जबकि गिट जीआईटी के साथ आता है, यह न तो कमांड लाइन ऐप है और न ही विशेष रूप से अच्छा जीयूआई है। - mikemaccana
क्या वह कमांड लाइन उपकरण ढूंढ रहा था? "राइट क्लिक -> शो इतिहास" निश्चित रूप से इसका मतलब नहीं है। - hdgarrood


आप उपयोग कर सकते हैं

git log -p filename

गिट को प्रत्येक लॉग एंट्री के लिए पैच जेनरेट करने दें।

देख

git help log

अधिक विकल्पों के लिए - यह वास्तव में बहुत अच्छी चीजें कर सकता है :) केवल एक विशिष्ट प्रतिबद्धता के लिए भिन्नता प्राप्त करने के लिए आप कर सकते हैं

git show HEAD 

या पहचानकर्ता द्वारा कोई अन्य संशोधन। या प्रयोग करें

gitk

परिवर्तनों को दृष्टि से ब्राउज़ करने के लिए।


1836
2017-11-10 15:56



गिट शो हेड सभी फाइलें दिखाता है, क्या आप जानते हैं कि एक व्यक्तिगत फ़ाइल को कैसे ट्रैक किया जाए (जैसे रिचर्ड पूछ रहा था)? - Jonas Byström
आप इसका उपयोग करते हैं: गिट शो <संशोधन> - फ़ाइल नाम, जो उस संशोधन के लिए भिन्नता दिखाएगा, यदि कोई मौजूद है। - Marcos Oliveira
--स्टैट भी सहायक है। आप इसे एक साथ उपयोग कर सकते हैं -पी। - Raffi Khatchadourian
यह भी खूब रही। जब पथ मौजूद नहीं हैं तो निर्दिष्ट करते समय गिटक अच्छा व्यवहार नहीं करता है। मैंने गिट लॉग-पी-पथ का इस्तेमाल किया। - Paulo Casaretto
प्लस गिटक ऐसा लगता है कि यह बूगी राक्षस द्वारा बनाया गया था। यह एक अच्छा जवाब है और मूल प्रश्न के लिए सबसे अच्छा है। - ghayes


git log --follow -p -- file

यह दिखाएगा संपूर्ण फ़ाइल का इतिहास (नाम से परे इतिहास और प्रत्येक परिवर्तन के लिए diffs के साथ)।

दूसरे शब्दों में, अगर नाम की गई फ़ाइल bar एक बार नामित किया गया था foo, फिर git log -p bar (के बिना --follow विकल्प) केवल उस फ़ाइल तक का इतिहास दिखाएगा जहां इसका नाम बदल दिया गया था - यह फ़ाइल के इतिहास को तब तक नहीं दिखाएगा जब इसे जाना जाता था foo। का उपयोग करते हुए git log --follow -p bar फ़ाइल के पूरे इतिहास को दिखाएगा, जिसमें फ़ाइल में किए गए किसी भी बदलाव सहित इसे जाना जाता है foo-p विकल्प सुनिश्चित करता है कि प्रत्येक परिवर्तन के लिए diffs शामिल हैं।


1187
2018-03-30 23:25



--स्टैट भी सहायक है। आप इसे एक साथ उपयोग कर सकते हैं -पी। - Raffi Khatchadourian
दान का जवाब ही एकमात्र असली है! git log --follow -p file - zzeroo
मैं सहमत हूं कि यह असली जवाब है। (1.) --follow सुनिश्चित करता है कि आप फ़ाइल नाम (2) देखते हैं -p यह सुनिश्चित करता है कि आप देखते हैं कि फ़ाइल कैसे बदली जाती है (3.) यह केवल कमांड लाइन है। - Trevor Boyd Smith
@ बेंजोहन द -- विकल्प गिट को बताता है कि यह विकल्पों के अंत तक पहुंच गया है और जो भी कुछ भी है -- एक तर्क के रूप में माना जाना चाहिए। के लिये git log यदि आपके पास पथ पथ है जो किसी से शुरू होता है तो यह केवल कोई फर्क पड़ता है पानी का छींटा। मान लें कि आप उस फ़ाइल के इतिहास को जानना चाहते हैं जिसमें दुर्भाग्यपूर्ण नाम "--follow" है: git log --follow -p -- --follow - Dan Moulding
@ बेंजोहन: आम तौर पर, -- उपयोगी है क्योंकि यह किसी के खिलाफ भी रक्षा कर सकता है revision नाम जो आपके द्वारा दर्ज किए गए फ़ाइल नाम से मेल खाते हैं, जो वास्तव में डरावना हो सकता है। उदाहरण के लिए: यदि आपके पास एक शाखा और नाम दोनों फ़ाइल थीं foo, git log -p foo गिट लॉग इतिहास को दिखाएगा foo, इतिहास के लिए नहीं फ़ाइल  foo। लेकिन @DanMoulding सही है कि के बाद से --follow कमांड केवल एक फ़ाइल नाम को तर्क के रूप में लेता है, यह कम आवश्यक है क्योंकि यह एक नहीं हो सकता है revision। मैंने अभी सीखा है। शायद आप इसे अपने उत्तर से बाहर छोड़ने का अधिकार थे; मुझे यकीन नहीं है। - NHDaly


यदि आप टेक्स्ट-आधारित रहना पसंद करते हैं, तो आप इसका उपयोग करना चाहेंगे छूत

जल्दी स्थापित करें:

  • apt-get: # apt-get install tig 
  • होमब्रू (ओएस एक्स): $ brew install tig

एक फ़ाइल पर इतिहास देखने के लिए इसका इस्तेमाल करें: tig [filename]
या विस्तृत रेपो इतिहास ब्राउज़ करें: tig

के समान gitk लेकिन पाठ आधारित। टर्मिनल में रंग का समर्थन करता है!


147
2018-06-07 10:23



उत्कृष्ट पाठ-आधारित उपकरण, महान उत्तर। जब मैंने अपने हेडलेस सर्वर पर गिटक इंस्टॉल करने के लिए निर्भरताओं को देखा तो मैं बाहर निकल गया। ए +++ फिर से ऊपर उठाना होगा - Tom McKenzie
आप टिग के साथ विशिष्ट फाइलों को भी देख सकते हैं, यानी। tig -- path/to/specific/file - gloriphobia


git whatchanged -p filename के बराबर भी है git log -p filename इस मामले में।

आप यह भी देख सकते हैं कि फ़ाइल के अंदर कोड की एक विशिष्ट पंक्ति के साथ बदल दिया गया था git blame filename। यह एक छोटी प्रतिबद्ध आईडी, लेखक, टाइमस्टैंप, और फ़ाइल में प्रत्येक पंक्ति के लिए कोड की पूरी लाइन मुद्रित करेगा। आपको बग मिलने के बाद यह बहुत उपयोगी होता है और आप जानना चाहते हैं कि इसे कब पेश किया गया था (या यह किसकी गलती थी)।


102
2017-11-11 06:12



+1, लेकिन filename आदेश में वैकल्पिक नहीं है git blame filename। - rockXrock
"नए उपयोगकर्ताओं को इसके बजाय गिट-लॉग का उपयोग करने के लिए प्रोत्साहित किया जाता है। (...) आदेश मुख्य रूप से ऐतिहासिक कारणों से रखा जाता है;" - ciastek


SourceTree उपयोगकर्ता

यदि आप अपने भंडार को देखने के लिए SourceTree का उपयोग करते हैं (यह मुफ़्त है और काफी अच्छा है) तो आप एक फ़ाइल पर राइट क्लिक कर सकते हैं और चयन कर सकते हैं लॉग चयनित

enter image description here

प्रदर्शन (नीचे) गिटक से अधिक मित्रवत है और सूचीबद्ध अन्य विकल्प। दुर्भाग्यवश (इस समय) कमांड लाइन से इस दृश्य को लॉन्च करने का कोई आसान तरीका नहीं है - स्रोत ट्री का सीएलआई वर्तमान में केवल रिपोज़ खोलता है।

enter image description here


92
2017-07-30 18:55



मुझे विशेष रूप से "नामित फाइलों का पालन करें" विकल्प पसंद है, जो आपको यह देखने की अनुमति देता है कि फ़ाइल का नाम बदल दिया गया था या स्थानांतरित किया गया था या नहीं। - Chris
लेकिन जब तक मैं गलत नहीं हूं (कृपया मुझे बताएं!), कोई भी गुई में एक समय में दो संस्करणों की तुलना कर सकता है? क्या ऐसे कोई ग्राहक हैं जिनके पास एक साथ कई अलग-अलग संस्करणों को अलग करने के लिए एक सुरुचिपूर्ण इंटरफ़ेस है? संभवतया ज़ूम-आउट दृश्य के साथ सब्लिमे टेक्स्ट में? यह वास्तव में उपयोगी होगा मुझे लगता है। - Sam Lewallen
@ सैमलेवेलेन अगर मैं सही ढंग से समझता हूं तो आप तीन अलग-अलग कामों की तुलना करना चाहते हैं? यह एक तीन-तरफा विलय (मेरा, तुम्हारा, आधार) जैसा लगता है - आम तौर पर इस रणनीति का उपयोग विलय संघर्षों को हल करने के लिए किया जाता है जो आवश्यक रूप से तीन मनमानी कामों की तुलना नहीं करता है। ऐसे कई उपकरण हैं जो तीन तरह के विलय का समर्थन करते हैं stackoverflow.com/questions/10998728/... लेकिन यह चाल इन उपकरणों को विशिष्ट संशोधनों को खिला रही है gitready.com/intermediate/2009/02/27/... - Mark Fox
धन्यवाद मार्क फॉक्स, यही मेरा मतलब है। क्या आपको ऐसा करने वाले किसी भी एप्लिकेशन के बारे में पता चल जाएगा? - Sam Lewallen
तुम मेरी जिंदगी बचाओ आप उपयोग कर सकते हैं gitk खोजने के लिए SHA1 हैश, और फिर खोलें SourceTree प्रवेश करना Log Selected.. पाया के आधार पर SHA1। - AechoLiu


यह दिखाने के लिए कि किस संशोधन और लेखक ने फ़ाइल की प्रत्येक पंक्ति को अंतिम बार संशोधित किया है:

git blame filename

या यदि आप शक्तिशाली दोष जीयूआई का उपयोग करना चाहते हैं:

git gui blame filename

57
2017-08-11 13:01





उनके माध्यम से पढ़ने और थोड़ा सा खेलने के बाद अन्य उत्तरों का सारांश:

सामान्य कमांड लाइन कमांड होगा

git log --follow --all -p dir/file.c

लेकिन आप इसे देखने के अधिक मानव-पठनीय तरीके देने के लिए या तो गिटक (गुई) या टिग (टेक्स्ट-यूई) का भी उपयोग कर सकते हैं।

gitk --follow --all -p dir/file.c

tig --follow --all -p dir/file.c

डेबियन / उबंटू के तहत, इन सुंदर उपकरणों के लिए इंस्टॉल कमांड अपेक्षित है:

sudo apt-get install gitk tig

और मैं वर्तमान में उपयोग कर रहा हूँ:

alias gdf='gitk --follow --all -p'

ताकि मैं बस टाइप कर सकूं gdf dir उपनिर्देशिका में सब कुछ का एक केंद्रित इतिहास प्राप्त करने के लिए dir


40
2017-12-05 18:38



मुझे लगता है कि यह एक अच्छा जवाब है। हो सकता है कि आप वोट भी नहीं दे रहे हैं क्योंकि आप गिट के अलावा गिटक और टिग के माध्यम से परिवर्तनों को देखने के लिए अन्य तरीकों (आईएमएचओ बेहतर) का जवाब देते हैं। - PopcornKing
जवाब में जोड़ने के लिए बस। पथ का पता लगाएं (गिट स्पेस में, जो अभी भी भंडार में मौजूद है)। फिर ऊपर दिए गए आदेश का उपयोग करें "गिट लॉग --follow --all -p <folder_path / file_path>"। ऐसा मामला हो सकता है कि इतिहास में filde / फ़ोल्डर को हटा दिया गया होगा, इसलिए अभी भी मौजूद अधिकतम पथ का पता लगाएं, और इसके इतिहास को लाने का प्रयास करें। काम करता है! - parasrish
--all सभी शाखाओं के लिए है, बाकी को @ दान के जवाब में समझाया गया है - cregox


इस उपनाम को अपने .gitconfig में जोड़ें:

[alias]
    lg = log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\n--abbrev-commit --date=relative

और इस तरह के कमांड का उपयोग करें:

> git lg
> git lg -- filename

आउटपुट लगभग गिट आउटपुट के समान ही दिखाई देगा। का आनंद लें।


22
2018-06-26 20:12



मैंने उस एलजी शॉर्टकट को चलाने के बाद, मैंने कहा (और मैं उद्धरण) "सुंदर!"। हालांकि, ध्यान दें कि "- ng" के बाद "- nraph" एक त्रुटि है। - jmbeck
भी इस्तेमाल किया जा सकता है git lg -p filename - यह खोजी गई फ़ाइल का एक सुंदर diff देता है। - Egel


मैंने लिखा Git-प्लेबैक इस सटीक उद्देश्य के लिए

pip install git-playback
git playback [filename]

इसका परिणाम कमांड लाइन में परिणाम प्रदर्शित करने का लाभ है (जैसे git log -p) जबकि आपको तीर कुंजियों (जैसे gitk)।


14
2017-11-19 06:25





या:

gitx -- <path/to/filename>

यदि आप उपयोग कर रहे हैं gitx


13
2017-09-17 16:50



किसी कारण से मेरा gitx खाली खुलता है। - Igor Ganapolsky
@IgorGanapolsky आपको यह सुनिश्चित करना होगा कि आप अपने गिट भंडार की जड़ पर हैं - zdsbs