Git: यदि कोई स्थानीय रेपो अद्यतित है, तो कैसे जांचें?


85

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

मैं यह कैसे कर के बिना जाँच कर सकता है git fetchया git pull?

जवाबों:


94

git fetch --dry-run मैन्युअल आज़माएं ( git help fetch) कहता है:

--dry-run
Show what would be done, without making any changes.

3
धन्यवाद! हालाँकि, यह आउटपुट से समझना मुश्किल है कि कौन सी फाइलें जोड़ी गईं / संशोधित / हटा दी गईं।
मीशा मोरशको

1
आपको यह देखने को मिलता है कि कौन-से टैग अपडेट किए गए हैं और विभिन्न शाखाओं के लिए प्रारंभ..आधार सीमा है। यदि यह पर्याप्त नहीं है, तो इसे एक उचित फ़ेच (पुल न करें) के रूप में करें, जो आपको अपनी शाखा कार्य को प्रभावित किए बिना, रिमोट की एक उचित, अलग, स्थानीय प्रतिलिपि देगा। एक पुल दो को मिलाने का प्रयास करेगा, जो आप नहीं चाहते। डेटा ट्रांसफर वही है जो आप --dry-run या नहीं।
फिलिप ओकले

4
ऐसा क्यों है कि जब मैं git fetch --dry-runकुछ भी नहीं दिखाता है?
परमवीर सिंह करवाल

3
@ParamvirSinghKarwal Git की रिपोर्ट में यह बहुत कम है। अगर कहने को कुछ नहीं है, तो यह कुछ भी नहीं कहता है, जैसे कि कुछ भी नहीं हुआ। हो सकता है कि आप अपने नियमित रूप से लाने के लिए तैयार हैं। शायद जोड़ सकते हैं --all?
फिलिप ओकले

1
@AaronBeall यदि यह मामला है, तो इसका सबसे अधिक मतलब है कि आपने पहले ही उन परिवर्तनों को स्थानीय रूप से प्राप्त कर लिया है (इसलिए कुछ भी नहीं लाने के लिए), लेकिन अभी तक उन्हें अपनी शाखा में विलय नहीं किया है। git pullलगभग एक के बराबर है git fetch && git merge। यदि आप किसी भी बिंदु पर बिना भागे गए हैं --dry-run, तो आप पहले से ही स्थानीय रूप से चीजों को प्राप्त कर चुके हैं।
डकपुप्पी

34
git remote show origin

परिणाम:

HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (local out of date) <-------

वह सर्वकालिक शाखाओं को सूचीबद्ध करता है। यदि आपके पास एक लंबा इतिहास है, तो आउटपुट काफी अव्यवस्थित है।
पाउलो कार्वाल्हो

git रिमोट शो की उत्पत्ति | grep "your / branch"
jim smith

26

पहले का उपयोग करें git remote update, आज तक अपने दूरस्थ रेफरी लाने के लिए। फिर आप कई काम कर सकते हैं, जैसे:

  1. git status -unoआपको बताएगा कि क्या आप जिस शाखा पर नज़र रख रहे हैं, वह आगे है, पीछे है या निकली है। यदि यह कुछ नहीं कहता है, तो स्थानीय और दूरस्थ समान हैं। नमूना परिणाम:

शाखा पर डी.ई.वी.

आपकी शाखा 7 आवागमन द्वारा 'मूल / DEV' के पीछे है, और इसे तेजी से आगे बढ़ाया जा सकता है।

(अपनी स्थानीय शाखा को अद्यतन करने के लिए "गिट पुल" का उपयोग करें)

  1. git show-branch *master आपको उन सभी शाखाओं में दिखाई देगा जिनके नाम 'मास्टर' (जैसे मास्टर और मूल / मास्टर) में समाप्त होते हैं।

यदि आप -vgit रिमोट अपडेट ( git remote -v update) के साथ उपयोग करते हैं, तो आप देख सकते हैं कि कौन सी शाखाएँ अपडेट हुई हैं, इसलिए आपको वास्तव में किसी और कमांड की आवश्यकता नहीं है।


2
यह इतना नीचे क्यों है? git remote update ; git status -unoउसे हल कर लिया। git fetch --dry-runउन मामलों में भी कोई आउटपुट नहीं दिया जहां स्थानीय रिमोट के पीछे था।
आरोन बाइलल

1
git remote -v updateमेरे लिए जवाब है।
पाउलो कार्वाल्हो

17

आप यह git status -unoजांचने के लिए उपयोग कर सकते हैं कि आपकी स्थानीय शाखा मूल के साथ अद्यतित है या नहीं।


18
यह केवल स्थानीय स्थिति देता है, दूरस्थ शाखा के साथ जाँच नहीं करता है।
इशान लियानेज

4
केवल स्थानीय देता है, लेकिन git remote update ; git status -unoचाल चली! git fetch --dry-runजब मैं यह करने की उम्मीद (और कोई उत्पादन दे दी git pullबातें खींच होगा)।
आरोन बाइलल

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

8

वास्तव में नहीं - लेकिन मैं नहीं देखता कि कैसे git fetchचोट लगेगी क्योंकि यह आपकी किसी भी स्थानीय शाखा को नहीं बदलेगा।


मैं पूरी तरह से इस बात से सहमत हूं। जीआईटी पुल क्षतिग्रस्त हो सकता है, फाइलों को ओवरराइट कर सकता है। लेकिन git fetch केवल meta data को नीचे खींचता है, जिससे git स्टेटस जैसी कमांड आपको बता सकती है कि आपका लोकल रेपो किसी फाइल को ओवरराइट किए बिना डेट कर रहा है या नहीं। यह प्रश्न के पत्र का उत्तर नहीं दे सकता है, लेकिन यह प्रश्न की भावना का उत्तर देता है, आपको वह उपकरण प्रदान करता है जिसे आप चाहते हैं। Git लाने के लिए, फिर git स्टेटस आपको बताएगा कि आपकी स्थानीय रेपो फ़ाइलों को अधिलेखित किए बिना रिमोट के संबंध में कहां है।
मेरिटेल 64

5

एक अन्य विकल्प यह है कि दूरस्थ शाखा की स्थिति को देखने के git show-branch remote/branchलिए इसका उपयोग करने के लिए एक तुलना के रूप में आप git show-branch *branchशाखा को सभी रीमोट के साथ-साथ अपने भंडार में देख सकते हैं ! अधिक https://stackoverflow.com/a/3278427/2711378 के लिए इस उत्तर को देखें


5

आपको दो आदेश जारी करने की आवश्यकता होगी:

  1. git लाने का मूल
  2. गिट स्थिति

1
यह काम करता है, लेकिन सवाल 'भ्रूण' के बिना स्पष्ट रूप से कहता है। ऐसे कई मामले हैं जहां आप जानना चाहते हैं कि वास्तव में परिवर्तनों को लाने या मर्ज किए बिना आपका स्थानीय रेपो रिमोट रेपो से कैसे अलग है।
चरणराम बशीरी

1
@pedrambashiri मैं वास्तव में उत्सुक हूं, क्या पसंद है? मेरे ज्ञान के लिए अकेले एक भ्रूण कुछ भी नुकसान नहीं पहुंचा सकता है।
प्रोमेथियस

@Prometheus पहली बात, मैं केवल यह बताना चाहता था कि जब कोई प्रश्न स्पष्ट रूप से 'बिना भ्रूण के' मिलता है, तो आप बस अपने उत्तर में भ्रूण का उपयोग नहीं कर सकते हैं, अगर ऐसा करने का कोई अन्य तरीका नहीं है, या इसके बिना करने के लिए कोई वास्तविक मामला नहीं है, तो इसकी आवश्यकता है उत्तर में समझाया जाए। लेकिन आपके सवाल का जवाब देने के लिए, एक रिमोट रिमोट रेपो की एक स्थानीय प्रति अपडेट करता है। इस पोस्ट में चित्र को देखो blog.osteele.com/2008/05/my-git-workflow
pedram Bashiri

4

git fetchअपने दूरस्थ सर्वर पर फ़ाइलों के खिलाफ अपने स्थानीय भंडार की तुलना करने से पहले आपको चलना चाहिए ।

यह आदेश केवल अपने रिमोट ट्रैकिंग शाखाओं अद्यतन करता है और अपने worktree को प्रभावित नहीं करेगा जब तक आप फोन git mergeया git pull

अपनी स्थानीय शाखा और अपनी दूरस्थ ट्रैकिंग शाखा के बीच अंतर देखने के लिए, जब आप यहां बताए गए अनुसार git diff या git चेरी का उपयोग कर सकते हैं।


2

यदि तुम प्रयोग करते हो

git fetch --dry-run -v <link/to/remote/git/repo>

आपको इस बारे में फ़ीडबैक मिलेगा कि यह अद्यतित है या नहीं। तो मूल रूप से, आपको पहले दिए गए उत्तर में "वर्बोज़" विकल्प जोड़ना होगा।


1

यह उपयोग किए बिना git fetchया असंभव है git pull। आप कैसे पता लगा सकते हैं कि रिपॉजिटरी "अप-टू-डेट" है या नहीं, दूरस्थ रिपॉजिटरी में जाने के बिना यह देखने के लिए कि "अप-टू-डेट" का अर्थ क्या है?


5
कृपया पुष्टि करें कि! आपने अभी उत्तर दिया कि आप क्या सोचते हैं! आप अधिक सावधान रहना चाहिए क्योंकि newbies इसके साथ बढ़ जाएगा!
अमानुएल नेगा

4
@AmanuelNega: यह सिर्फ बुनियादी तर्क है। यदि आप यह जानना चाहते हैं कि आपका स्थानीय रेपो दूरस्थ रेपो के समान स्थिति में है या नहीं, तो आपको दूरस्थ रेपो की स्थिति को जानना होगा। अवधि। यदि आप दूरस्थ रेपो की स्थिति को नहीं जानते हैं, तो आप संभवतः यह नहीं जान सकते कि स्थानीय रेपो उसी स्थिति में है या नहीं। ध्यान दें कि उच्चतम मतदान और स्वीकृत उत्तर का उपयोग करता है git pull, जिसे ओपी अपने प्रश्न में स्पष्ट रूप से मना करता है।
जोर्ग डब्ल्यू मित्तग

2
सूचित रहें! git status -unoयह काम करता है और एक git show-branch *masterसभी मास्टर शाखाओं की स्थिति देखने के लिए भी उपयोग कर सकता है! क्या आप अभी भी कह रहे हैं कि यह असंभव है? आप किसी भी शाखा की स्थिति देख सकते हैं जब तक कि आपके पास रिमोट तक पहुंच नहीं है!
अमानुएल नेगा

2
@AmanuelNega: git statusकेवल आपको आपके स्थानीय रेफ की स्थिति बताता है, यह आपको यह नहीं बताता है कि आपके स्थानीय रेफरी दूरस्थ रेफ के साथ अप-टू-डेट हैं या नहीं। फिर से: रिमोट रेपो की स्थिति प्राप्त किए बिना रिमोट रेपो की स्थिति क्या है, यह जानना केवल तार्किक रूप से असंभव है। अवधि। यह केवल स्पेसटाइम का मूल नियम है।
जोर्ग डब्ल्यू मित्तग

6
स्व-साक्ष्य के बाद से यह "तार्किक रूप से असंभव" नहीं है क्योंकि आपके सर्वर रूम में कोई व्यक्ति रिंग कर सकता है और कह सकता है, "मास्टर शाखा पर आपके हेड का हैश है" वे आपको बता सकते हैं और फिर आप स्थानीय जांच कर सकते हैं और देख सकते हैं कि आप डॉन 'हैश हैश। अब आप जानते हैं कि वे सिंक से बाहर हैं।
जेम्स रॉबिन्सन

1

मेरे उत्तर को प्रारूपित करने की कोशिश की, लेकिन नहीं कर सका। स्टैकओवरफ्लो टीम को प्लीज, उत्तर पोस्टिंग इतनी कठिन क्यों है।

तथापि,

उत्तर:
git fetch उत्पत्ति
git स्टेटस (आप परिणाम देखेंगे कि "आपकी शाखा 'मूल / मास्टर के पीछे 9 कमिट्स द्वारा है)"
दूरस्थ परिवर्तनों को अद्यतन करने के लिए: git pull

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