मैं कैसे देख सकता हूं कि मैं जोर से धक्का देने वाला हूं?


587

क्या यह देखने का एक तरीका है कि अगर मैंने एक git pushकमांड किया तो क्या धक्का होगा ?

मैं जो चित्र बना रहा हूं वह गितुब के "पुल रिक्वेस्ट" फीचर के "फाइल चेंजेड" टैब जैसा है। जब मैं एक पुल अनुरोध जारी करता हूं, तो मैं देख सकता हूं और देख सकता हूं कि अगर वे मेरे अनुरोध को स्वीकार करते हैं तो क्या खींचा जाएगा:समग्र परिवर्तनों का उदाहरण

कमांड लाइन ठीक है, लेकिन मैं कुछ प्रकार की जीयूआई (ऊपर स्क्रीनशॉट की तरह) पसंद करूंगा।



कई संबंधित प्रश्न / उत्तर; यहाँ एक और है: stackoverflow.com/questions/2176278/preview-a-git-push/…
माइकल

जवाबों:


664

पुश की जाने वाली फ़ाइलों की सूची के लिए, चलाएँ:

git diff --stat --cached [remote/branch]

उदाहरण:

git diff --stat --cached origin/master

फ़ाइलों को धक्का दिए जाने वाले कोड के लिए, चलाएँ:

git diff [remote repo/branch]

बदल जाएगा फ़ाइलों का पूरा फ़ाइल पथ देखने के लिए, चलाएँ:

git diff --numstat [remote repo/branch]

यदि आप एक GUI में ये अंतर देखना चाहते हैं, तो आपको उसके लिए git कॉन्फ़िगर करना होगा। देखें कि मैं दृश्य भिन्न कार्यक्रम के साथ 'git diff' आउटपुट कैसे देखता हूं?


8
गिट भिन्नता के दोनों भिन्न रूप - बिना दिए गए एक कमिट केवल HEAD के संबंध में w / संबंध में अंतर प्रदर्शित करेंगे। मुझे लगता है कि आपका मतलब है कि अंतर अलग है - [मूल] - मूल / गुरु, मूल की मुख्य शाखा को मानते हुए मास्टर है
mfontani

52
यह वही नहीं है जो आप चाहते हैं। HEADमूल ( git diff origin/master HEAD) के खिलाफ आपको इंडेक्स नहीं, बल्कि अलग होना चाहिए । इंडेक्स को डिफ्यूज करना वही परिणाम देगा, अगर और केवल अगर आपके पास कमिटमेंट के लिए कोई बदलाव नहीं है। यदि आपके पास परिवर्तन किए गए हैं, तो वे अंतर में शामिल किए जाएंगे, लेकिन स्पष्ट रूप से धक्का नहीं दिया जाएगा क्योंकि वे अभी तक प्रतिबद्ध नहीं हैं।
कैस्केबेल

5
इस उत्तर को @Jefromi की टिप्पणी में जानकारी शामिल करने के लिए संपादित करने की आवश्यकता git diff --stat origin/master HEADहै जो सही उत्तर है।
टोनी टॉपर

2
@mfontani के पास मेरे लिए सही जवाब है। मैं यह जांचना चाहता हूं कि जो मैंने पहले से ही प्रतिबद्ध है उससे धक्का दिया होगा, न कि अगर मैंने जो कुछ भी बदल दिया है, तो मैं क्या करूंगा। git diff --cached [remote/branch]चाल करता है :)
poshaughnessy

2
टाइपिंग ओरिजिन / मास्टर टाइप करने के बजाय, आप @ {u} का उपयोग कर सकते हैं जैसे git diff @ {u} या git diff HEAD @ {u} ध्यान दें कि यह केवल तभी काम करता है जब आपके पास अपस्ट्रीम ट्रैकिंग ब्रांच पहले से निर्मित और लिंक हो। मुझे यह उपयोगी लगता है जब मुझे बहुत सी शाखाएं और बहुत सारे रीमोट मिले हैं ताकि मुझे यह सोचने की ज़रूरत न हो कि क्या लिंक कहाँ है।
डेमियन सॉयर

192

वहाँ हमेशा सूखा है:

git push --dry-run

यह वास्तव में डेटा भेजने के अलावा सब कुछ करेगा।

यदि आप अधिक चित्रमय दृश्य चाहते हैं तो आपके पास विकल्पों का एक समूह है।

टिग और गिट स्क्रिप्ट जो गिट के साथ आती है, दोनों आपकी स्थानीय कॉपी की वर्तमान शाखा और रिमोट या मूल की शाखा को प्रदर्शित करती हैं।

वैकल्पिक शब्द

तो आपके द्वारा किए गए कोई भी कमिट्स मूल के बाद आने वाले कमिट हैं जिन्हें धक्का दिया जाएगा।

जिस शाखा में आप टाइप करके पुश करना चाहते हैं, उस समय शेल से ओपन करें gitk&, फिर रिमोट पर क्या है और आप रिमोट को पुश करने वाले हैं, के बीच अंतर को देखने के लिए, अपनी स्थानीय अप्रयुक्त प्रतिबद्ध का चयन करें और रिमोट पर राइट-क्लिक करें "यह मुश्किल -> चयनित" चुनें: वैकल्पिक शब्द


18
git push-dry-run मुझे कुछ भी नहीं दिखाती है जैसे मैं देखने की उम्मीद कर रहा हूं। gitk करीब है, लेकिन यह मुझे उन सभी परिवर्तनों के कुल योग को नहीं दिखाता है जिन्हें धक्का दिया जाएगा। इसलिए यदि मैं रिमोट पर 6 कमिट्स पुश कर रहा हूं, तो मैं कुल योग देखना चाहता हूं जो पुश किया जाएगा। मुझे परवाह नहीं है कि प्रत्येक प्रतिबद्ध में व्यक्तिगत रूप से क्या है क्योंकि एक प्रतिबद्ध अगले द्वारा पूरी तरह से नकारात्मक हो सकता है।
cmcculloh

1
यदि आपको इस बात की आवश्यकता है कि क्या धक्का दिया जाएगा, git diff --stat HEAD origin/masterया git diff HEAD origin/master। महत्वपूर्ण HEAD है , अन्यथा आप अपने अंतर में अनक्मिटेड बदलाव शामिल करते हैं
डैनियल एल्डर

क्या कोई कारण है कि इससे पहले कि यह किसी दूरस्थ को डेटा पुश करने की कोशिश करता है, git स्वचालित रूप से ड्राई-रन नहीं करता है? यदि आप बड़ी मात्रा में डेटा पुश कर रहे हैं, तो यह सभी डेटा अपलोड करता है और उसके बाद कोई भी त्रुटि दिखाता है। आपने अभी समय और बैंडविड्थ अपलोडिंग डेटा को बर्बाद किया है जिसे अब आपको फिर से अपलोड करना है। यह अजीब व्यवहार की तरह लगता है।
zeusstl

1
इसके साथ समस्या git push --dry-runयह है कि इसे अभी भी रिमोट पर लिखित अनुमति की आवश्यकता है। इसलिए यदि आपके पास अपस्ट्रीम पुश करने की अनुमति के बिना कोई क्लोन है, लेकिन आप यह देखना चाहेंगे कि आपके स्थानीय अप्रकाशित परिवर्तन क्या हैं, --dry-runतो यह नहीं करेंगे।
एड एविस

यह एक अच्छा समाधान है, लेकिन यह ध्यान दिया जाना चाहिए कि इसे रिमोट से कनेक्ट करने की आवश्यकता है (यदि लागू हो तो एसएसएच कुंजी दर्ज करना भी शामिल है)। यदि आप केवल branchऔर के बीच का अंतर देखना चाहते हैं origin/branch, तो मैं आयनोन जी स्टेन के जवाब के साथ जाऊंगा, क्योंकि इसे वास्तव में रिमोट रेपो से कनेक्ट करने की आवश्यकता नहीं है। यह अच्छा या बुरा हो सकता है, जो आपको चाहिए।
बीन

169

बस धक्का दिए जाने की प्रतीक्षा कर रहे कमिट्स को सूचीबद्ध करने के लिए: ( यह वह है जिसे आप याद करेंगे )

git cherry -v

SHA1s के आगे प्रतिबद्ध विषय दिखाएं।


5
एक दिलचस्प बात यह है कि आप तुलना करने के लिए एक रिमोट निर्दिष्ट कर सकते हैं जैसे: git cherry -v heroku/remoteयदि आप अपना कोड एक से अधिक रिमोट में रखते हैं।
फगियानी

सबसे अच्छा पूरक कमांड क्या है जो हमें वास्तव में उन अंतरों को सहसंबंधित करने की अनुमति देता है जो इन कमिटों में निहित हैं?
हसन बेग

यह आदेश अच्छा है, लेकिन मैं अधिक विस्तार चाहूंगा, जैसे कि पुश के दौरान फ़ाइलों के नाम बदलना।
LS

21

आप शायद दौड़ना चाहते हैं git difftool origin/master...। जो आपकी वर्तमान शाखा पर एकीकृत रूप को दिखाना चाहिए, जो अभी तक मूल / मास्टर शाखा पर नहीं है और इसे अपनी पसंद के चित्रमय भिन्न उपकरण में प्रदर्शित करें। सबसे अद्यतित होने के लिए, git fetchपहले दौड़ें ।


2
git difftool -d origin/master, मैं अपने difftool पिघलने के लिए सेट है तो यह महान काम करता है, thx!
कुंभ पावर

git difftool -dबेहतर तरीका है, धन्यवाद कुंभ पावर। एकमात्र समस्या यह है कि यह स्थानांतरित फ़ाइलों का पता नहीं लगाती है और उन्हें हटाए गए और बदले में दिखाया जाता है।
EM0

8

रिमोट रेपो पर धकेलने से पहले अपने स्थानीय संस्करण की तुलना करने का एक तरीका (ड्राई-रन में पुश का प्रकार):

TortoiseGit का उपयोग करें:
रूट फ़ोल्डर प्रोजेक्ट पर राइट क्लिक करें> TortoiseGit> पिछले संस्करण के साथ डिफ्यूज़>
संस्करण 2 के लिए चुनेंrefs/remotes/origin/master


8

कोशिश करें git diff origin/master..master(यह मानते हुए कि origin/masterआपका अपस्ट्रीम है)। इसके विपरीत git push --dry-run, यह तब भी काम करता है, भले ही आपके पास अपस्ट्रीम की अनुमति न हो।


5

उपयोग करें git gui, वहां आप अपनी वास्तविक प्रतिबद्धताओं में क्या बदला है, इसकी एक सूची देख सकते हैं। आप gitkरिफ्लक्स के लिए एक आसान इंटरफ़ेस प्रदान करने वाले विच का भी उपयोग कर सकते हैं । बस तुलना remotes/...और masterदेखने के लिए, क्या धक्का दिया जाएगा। यह आपके स्क्रीनशॉट के समान इंटरफ़ेस प्रदान करता है।

दोनों कार्यक्रम जीआईटी में शामिल हैं।


1
मुझे git gui में कोई जगह नहीं दिख रही है जो सब कुछ दिखाती है जो प्रतिबद्ध है लेकिन धक्का नहीं दिया गया है।
cmcculloh

Git gui में आप देख सकते हैं, क्या संशोधित है लेकिन कमिट नहीं किया गया है। Gik (वाया में gitk --allआपको सभी टिप्पणियों की पूरी सूची मिलती है। अब आप अपनी देव-शाखा की वास्तविक स्थिति की तुलना अपने रिमोट से कर सकते हैं।
fuz

4

यह देखने के लिए कि आपके द्वारा उपयोग की जाने वाली शाखा की तुलना में कौन सी फाइलें बदली गई हैं और वास्तविक कोड परिवर्तन देखें master:

git diff --stat --patch origin master

नोट : यदि आप किसी भी Intellij IDEs का उपयोग करने के लिए होते हैं तो आप अपने शीर्ष-स्तरीय प्रोजेक्ट पर राइट-क्लिक कर सकते हैं, Git > ब्रांच से तुलना करें > और इच्छित मूल चुनें origin/master। फ़ाइल ट्री में जो आपको दिखाई देगा वह विजुअल फ़र्क देखने के लिए फ़ाइलों को डबल-क्लिक कर सकता है। ऊपर दिए गए कमांड-लाइन विकल्प के विपरीत, आप अपने स्थानीय संस्करणों को अलग विंडो से संपादित कर सकते हैं।


3

आप इसके द्वारा कमिट्स को सूचीबद्ध कर सकते हैं:

git cherry -v

और फिर निम्नलिखित कमांड के साथ तुलना करें जहां ^ की संख्या कमिट की संख्या के बराबर होती है (उदाहरण में इसके 2 कमिट)

git diff HEAD^^

नवीनतम कमिट की सूची देखने के लिए बस एक अच्छा है। यह फ़ाइल का नाम नहीं देगा। इसलिए, जैसा कि कुछ ने कहा कि सूखे रन विकल्प और पैच विकल्प का उपयोग करना बेहतर है। git diff --stat --patch ओरिजिनल मास्टर git पुश --dry-run
श्री राम

2

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

और नहीं, मैं उनके साथ संबद्ध नहीं हूं, मैं सिर्फ उनके सॉफ्टवेयर का उपयोग करता हूं और वास्तव में इसे पसंद करता हूं।

http://www.git-tower.com/


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

इस सवाल का जवाब नहीं है।
रीइनस्टीरपोस्ट

1

बस अपने दो सेंट जोड़ने के लिए ... मैं एक gitlab धावक पर gitlab पाइपलाइन में नौकरी चलाते समय इसे लागू करना चाहता था। इसका सबसे अच्छा तरीका इस स्क्रिप्ट का उपयोग करना था:

git diff --name-only $CI_COMMIT_BEFORE_SHA $CI_COMMIT_SHA

इसके अलावा मेरे मामले में मैं विस्तार से फाइलों को फ़िल्टर करना चाहता था, इसे हासिल करने के लिए मैंने इसका इस्तेमाल किया:

git diff --name-only $CI_COMMIT_BEFORE_SHA $CI_COMMIT_SHA '*.py'

उसके बाद आप उदाहरण के लिए इस सूची को आगे कहीं और रख सकते हैं;

आशा है कि यह किसी की मदद करेगा।


1
  1. यदि आपके पास रिमोट पर लिखने की अनुमति है
git push --dry-run
  1. यदि आपके पास रिमोट पर लिखने की अनुमति नहीं है
git diff --stat HEAD remote/branch

0

के बाद git commit -m "{your commit message}", आप पुश से पहले एक प्रतिबद्ध हैश प्राप्त करेंगे । तो आप देख सकते हैं कि gitनिम्नलिखित कमांड को चलाकर आप किन चीजों को आगे बढ़ा सकते हैं :

git diff origin/{your_branch_name} commit hash

उदाहरण के लिए: git diff origin/master c0e06d2


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