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

On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   source/blender/blenkernel/intern/mesh_evaluate.cc

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   source/blender/blenkernel/CMakeLists.txt
        deleted:    source/blender/blenkernel/intern/mesh_evaluate.c
        modified:   source/blender/blenlib/BLI_linklist_stack.h

लेकिन जब मैं git diff > foo.txt जैसा कुछ करता हूं, तो मुझे वहां "नई" फ़ाइल बिल्कुल नहीं दिखाई देती है। क्या मुझे कुछ और करने की जरूरत है?

git
1
easythrees 24 जून 2021, 00:30

4 जवाब

सबसे बढ़िया उत्तर

format-patch का इस्तेमाल करना आसान है

git commit -m 'message describing the change'
git format-patch -1 HEAD

यह क्रमांकित पैच फ़ाइलें उत्पन्न करेगा, जैसे 0001-message-describing-the-change.patch, जिसे आप तब अपने सहयोगी को भेज सकते हैं।

2
knittl 23 जून 2021, 21:56

नई फ़ाइल पहले से ही प्रतिबद्ध है, इसलिए यह git diff के आउटपुट में प्रकट नहीं होती है।

दूसरी ओर, यदि इसे स्टेजिंग क्षेत्र में नहीं जोड़ा गया होता, तो Git को इसके बारे में बिल्कुल भी पता नहीं होता और इसे git diff में भी नहीं दिखाया जाता।

समाधान "खाली" फ़ाइल को स्टेजिंग में जोड़ना है, लेकिन इसकी सामग्री को नहीं। इसके साथ किया जा सकता है

git add -N source/blender/blenkernel/intern/mesh_evaluate.cc

(इससे पहले, आपको इसे स्टेजिंग क्षेत्र से git reset के साथ फिर से निकालना होगा।)

2
mkrieger1 23 जून 2021, 21:37

git diff केवल अस्थिर परिवर्तन दिखाता है। इसका मतलब है कि यह बदली हुई फ़ाइलें नहीं दिखाएगा जिन्हें आपने git add का उपयोग करके स्टेजिंग क्षेत्र में जोड़ा है।

यदि आप चाहते हैं कि अंतर में स्टेजिंग क्षेत्र से फ़ाइलें शामिल हों, तो आप git diff के बजाय git diff HEAD का उपयोग कर सकते हैं। यह HEAD (वर्तमान में चेक आउट कमिट) के अंतर को दर्शाता है जिसमें चरणबद्ध परिवर्तन शामिल हैं।

यदि इसे स्टेजिंग क्षेत्र में जोड़ा जाता है, तो आप git diff HEAD का उपयोग करके अंतर देख सकते हैं।

हालांकि, जैसा कि knittlका मतलब से है। उसका उत्तर, git format-patch (या समान उपकरण) किसी और को परिवर्तन/पैच भेजने के लिए बेहतर है (पैच सबमिट करने के संबंध में अनुरक्षक के दिशानिर्देशों का पालन करना सुनिश्चित करें)।

2
dan1st 23 जून 2021, 21:51

git diff केवल उन ट्रैक की गई फ़ाइलों में परिवर्तन दिखाएगा जो पहले से प्रतिबद्ध नहीं हैं।

एक नई फ़ाइल अभी तक ट्रैक नहीं की गई है, इसलिए दिखाई नहीं दे रही है।

आपको इसे पहले git add newfile.txt का उपयोग करके जोड़ना होगा।

लेकिन फिर इसका तुरंत मंचन भी किया जाएगा, ताकि git diff उन परिवर्तनों को दिखा सकें जिनका आप उपयोग कर सकते हैं git diff --cached। या dan1st का अन्य उत्तर जो बेहतर imo है: https://stackoverflow.com/a/68107302/7362396

1
Tobias K. 23 जून 2021, 21:46