जवाबों:
आप -M का उपयोग करने की जरूरत है जब अंतर फ़ाइल को स्थानांतरित करने के लिए ऑटोडेक्ट करें। बस के git diff
रूप में उल्लेख knittl का उपयोग करना मेरे लिए काम नहीं करता है।
तो बस: git diff -M
यह करना चाहिए।
इस स्विच के लिए प्रलेखन है:
-M[<n>], --find-renames[=<n>]
Detect renames. If n is specified, it is a threshold on the similarity index
(i.e. amount of addition/deletions compared to the file’s size). For example,
-M90% means git should consider a delete/add pair to be a rename if more than
90% of the file hasn’t changed.
~/.gitconfig
?
git diff
। चल रहा है git diff -M
एक एकल (नाम बदला) फ़ाइल पर नाम बदलने रिपोर्ट नहीं करता।
git log --follow -- file_after_move.txt
अच्छी तरह से काम करता है। यह चाल से पहले सहित पूरे इतिहास को दर्शाता है। कोई विचार? मैं दौड़ रहा हूं git version 2.11.0.windows.1
।
-C
प्रतियों का पता लगाने का विकल्प उपयोगी और समान है। मैंने इसका उपयोग -M
एक ऐसे रूप को देखने के लिए किया था जहाँ मैंने एक फ़ाइल को दो में बदल दिया था (न कि मूल नाम से मेल खाते हुए)।
निट ने जो लिखा उसके अलावा , आप हमेशा उपयोग कर सकते हैं:
git diff HEAD:./oldfilename newfilename
जहां HEAD:./oldfilename
मौजूदा प्रतिबद्धता के सापेक्ष अंतिम प्रतिबद्धता (HEAD में) का पुराना अर्थ है।
यदि आपके पास नए पर्याप्त गिट नहीं हैं, तो आपको इसके बजाय उपयोग करना होगा:
git diff HEAD:path/to/oldfilename newfilename
git diff 39fa7c77e85c51d43ea0cf30d33aec8721812e9e:./oldfilename newfilename
git diff branch:old/filen.name newfilename
cd
डायरेक्टरी में जाते हैं और जोड़ी --
से पहले नहीं जोड़ते हैं commit:path
। यहाँ वाक्यविन्यास के साथ Git बहुत अचूक प्रतीत होता है।
<commit-ish>:<pathname>
वाक्यविन्यास एक वस्तु पहचानकर्ता है, कुछ Git-ish; --
Git के बाद ही फाइलनेम की उम्मीद है।
Git 2.9 (जून 2016) के साथ, आपको -M
अब और नहीं जोड़ना होगा। डिफ़ॉल्ट रूप से git diff
उपयोग करता -M
है।
5404c11 देखें , 9501d19 को कमिट करें , a9276a6 को कमिट करें , f07fc9e को कमिट करें , Matthieu Moy ( ) द्वारा 62df1e6 (25 Feb 2016) के लिए प्रतिबद्ध करें । (द्वारा विलय Junio सी Hamano - - में प्रतिबद्ध 5d2a30d , 03 अप्रैल 2016)moy
gitster
diff
:diff.renames
डिफ़ॉल्ट रूप से सक्रिय करेंनाम का पता लगाना एक बहुत ही सुविधाजनक सुविधा है, और नए उपयोगकर्ताओं को इससे लाभ पाने के लिए दस्तावेज़ में खुदाई नहीं करनी चाहिए।
नाम का पता लगाने को सक्रिय करने की संभावित आपत्तियां हैं कि यह कभी-कभी विफल हो जाता है, और यह कभी-कभी धीमा होता है। लेकिन नाम का पता लगाना पहले से ही "
git status
" और "git merge
" जैसे कई मामलों में डिफ़ॉल्ट रूप से सक्रिय है , इसलिए सक्रियdiff.renames
रूप से स्थिति को मौलिक रूप से नहीं बदलता है। जब नाम का पता लगाना विफल हो जाता है, तो यह अब "git diff
" और "git status
" के बीच लगातार विफल रहता है ।यह सेटिंग प्लंबिंग कमांड को प्रभावित नहीं करती है, इसलिए अच्छी तरह से लिखी गई स्क्रिप्ट प्रभावित नहीं होगी।
git diff -M
जैसा कि दूसरों ने कहा है (और जैसा @VonC ने बताया है, उसका नाम बदलना सक्रिय करता है, यह git 2.9 से डिफ़ॉल्ट रूप से सक्रिय होता है)। लेकिन अगर आपके पास एक बड़ा बदलाव है, तो सटीक नाम बदलना फिर भी बंद हो सकता है। Git निम्नलिखित की तरह एक चेतावनी प्रदर्शित करेगा, जो आप देख रहे हैं, के बीच याद करना आसान है:
warning: inexact rename detection was skipped due to too many files.
warning: you may want to set your diff.renameLimit variable to at least 450 and retry the command.
उदाहरण के लिए, उदाहरण के लिए, git द्वारा सुझाए गए कॉन्फ़िगरेशन विकल्प को सेट करें
git config diff.renamelimit 450
और अपने अलग कमांड को फिर से चलाएं।
जो भी कारण HEAD:./oldfilename
(या निरपेक्ष पथ) मेरे लिए काम नहीं किया, लेकिन HEAD:oldfilename
किया (धन्यवाद cmn):
git diff HEAD:oldfilename newfilename
git diff 2a80f45:oldfilename f65f3b3:newfilename
HTH
HEAD:./oldfilename
?
बस git diff
किसी भी तर्क के बिना, या git diff -- newfilename
। git सही फ़ाइलों / सामग्रियों की तुलना करने के लिए पर्याप्त स्मार्ट है (अर्थात नाम बदलने से पहले मूल सामग्री का नाम बदलने के बाद)
git mv
एक भी फ़ाइल आईएनजी और फिर एक और अन्यथा-समान शाखा के मंचन की स्थिति की तुलना "सब कुछ हटा दिया गया था और फिर से बनाया गया" तब तक अलग होगा जब तक कि -M
इसका उपयोग नहीं किया जाता है।
git diff -- yourRenamedFile
पर्याप्त होगा। देखें नीचे मेरा उत्तर