2008-10-07 6 views
156

क्या यह भी संभव है?बिना किसी काम किए गिट-पुल का पूर्वावलोकन कैसे करें?

मूल रूप से, वहाँ एक दूरस्थ भंडार जहाँ से मैं बस का उपयोग कर खींच रहा है:

git pull 

अब, मैं अपने पक्ष पर कुछ भी बिना छुए पूर्वावलोकन करने के लिए क्या इस पुल (एक अंतर) बदल जाएगा चाहते हैं। कारण यह है कि जो चीज मैं खींच रहा हूं वह "अच्छा" नहीं हो सकता है और मैं चाहता हूं कि कोई और मेरी रिपोजिटरी "गंदी" बनाने से पहले इसे ठीक करे।

+2

आपका संपादन अजीब है। "गिट फ़ेच" करने से आपके काम करने वाले पेड़ को किसी भी तरह से परिवर्तित नहीं किया जाता है, इसलिए इससे कोई फर्क नहीं पड़ता कि आपके पास स्थानीय परिवर्तन नहीं हैं। और यह स्पष्ट रूप से उस भाग का हिस्सा है जिसे आप पूर्ववत करना चाहते हैं, क्योंकि यह आपके कार्य के पेड़ को छूता नहीं है। – dkagedal

+0

धन्यवाद dkagedal, मैंने यह पूरी तरह से समझने से पहले लिखा कि गिट कैसे काम करता है। मैंने उस संपादन को हटा दिया। –

उत्तर

177

git fetch करने के बाद, अपने अंतिम आम प्रतिबद्धता और मूल शाखा के बीच लॉग प्रविष्टियां दिखाने के लिए git log HEAD..origin करें। Diffs दिखाने के लिए, प्रत्येक पैच दिखाने के लिए या git diff HEAD...origin (तीन बिंदु दो नहीं) दिखाने के लिए git log -p HEAD..origin का उपयोग करें, एक एकल अंतर दिखाने के लिए।

आमतौर पर एक fetch पूर्ववत करने की कोई आवश्यकता नहीं है, क्योंकि एक fetch केवल रिमोट शाखा और आपकी कोई भी शाखा अद्यतन नहीं करता है।यदि आप सभी रिमोट कमेट्स में पुल करने और मर्ज करने के लिए तैयार नहीं हैं, तो आप केवल git cherry-pick का उपयोग केवल विशिष्ट रिमोट कॉमिट्स को स्वीकार करने के लिए कर सकते हैं। बाद में, जब आप सब कुछ पाने के लिए तैयार होते हैं, तो बाकी चीजों में एक गिट पुल विलय हो जाएगा।

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

+0

मुझे लगता है कि दस्तावेज़ों को पढ़ने के दौरान मुझे 'मेरी शाखाओं के साथ कुछ भी करने' के उस हिस्से को याद नहीं आया। धन्यवाद। –

+0

किसी कारण से जो मेरे लिए काम नहीं करता है। मैंने गिट diff HEAD की कोशिश की ... मूल/मास्टर और जब तक मैं 'मूल मास्टर खींचता हूं' तब तक किसी भी बदलाव की सूची नहीं देता है और यह परिवर्तनों को विलय करता है। क्या ऐसा इसलिए है क्योंकि मैंने गिट रिमोट एड का उपयोग कर रिमोट रिपोजिटरी सेट की है? – screenm0nkey

+0

@ screenm0nkey: मुझे नहीं पता (अधिक जानकारी के बिना)। अगर आप अभी भी सुनिश्चित नहीं हैं तो मैं इसके बारे में पूछने के लिए एक नया प्रश्न खोलने की सलाह देता हूं। –

37

मुझे लगता है कि गिट fetch आपकी तलाश में है।

यह आपके स्थानीय रेपो इंडेक्स में किए बिना परिवर्तन और वस्तुओं को खींच देगा।

उन्हें बाद में गिट विलय के साथ विलय किया जा सकता है।

Man Page

संपादित करें: इसके अलावा explination

सीधे से Git- SVN क्रैश कोर्सlink

अब, आप एक दूरस्थ भंडार से किसी भी नए परिवर्तन मिलता है? आप उन्हें लाने:

git fetch http://host.xz/path/to/repo.git/ 

इस बात वे अपने भंडार में हैं पर और आप का उपयोग कर उन्हें जांच कर सकते हैं:

git log origin 

तुम भी परिवर्तन diff कर सकते हैं। आप अपनी शाखा में मौजूद परिवर्तनों को देखने के लिए गिट लॉग HEAD..origin का भी उपयोग कर सकते हैं। तो अगर उन्हें एक करना चाहते हैं - बस कार्य करें:

git merge origin 

ध्यान दें कि अगर आप को लाने के लिए एक शाखा निर्दिष्ट नहीं करते हैं, यह आसानी से ट्रैकिंग दूरदराज के लागू हो जाएगी।

मैन पेज पढ़ना ईमानदारी से आपको विकल्पों की सर्वोत्तम समझ और इसका उपयोग कैसे करना है।

मैं बस उदाहरण और स्मृति द्वारा ऐसा करने की कोशिश कर रहा हूं, मेरे पास वर्तमान में परीक्षण करने के लिए एक बॉक्स नहीं है। आप देखना चाहिए पर:

git log -p //log with diff 

एक लाने --hard रीसेट (link) Git के साथ पूर्ववत किया जा सकता है, तथापि अपने पेड़ में सभी अप्रतिबद्ध परिवर्तन पहले आप प्राप्त किए गए है और साथ ही नष्ट हो जाएंगे।

+0

यदि आप दो चीजों की व्याख्या करते हैं, तो यह अच्छा हो सकता है: 1. मैं गिट-फ़ेच कैसे पूर्ववत करूं? 2. मैं diff कैसे देख सकता हूँ? –

+1

1) गिट-फ़ेच को पूर्ववत करना? 2) गिट diff HEAD..origin –

+0

ईसाई ने कहा कि अंतर को गिट रीसेट के साथ पूर्ववत किया जा सकता है - हालांकि, आपके पेड़ में सभी अपरिचित परिवर्तन खो जाएंगे और साथ ही आपके द्वारा किए गए परिवर्तन भी खो जाएंगे। –

17

आप रिमोट रेपो से प्राप्त कर सकते हैं, अंतर देख सकते हैं और फिर खींच या मर्ज कर सकते हैं।

यह origin कहा जाता है एक दूरस्थ रेपो के लिए एक उदाहरण है और एक शाखा दूरस्थ शाखा origin/master ट्रैकिंग master कहा जाता है:

git checkout master             
git fetch           
git diff origin/master 
git pull --rebase origin master 
5

मुझे क्या करना है कि मुझे के लिए एक कस्टम Git उर्फ ​​बनाया:

alias.changes=!git log --name-status HEAD.. 

इसके साथ आप यह कर सकते हैं:

$git fetch 
$git changes origin 

यह आपको merge करने से पहले परिवर्तनों का पूर्वावलोकन करने का एक अच्छा और आसान तरीका मिलेगा।

+0

आप भगवान हैं। यह गिट के भीतर ही आना चाहिए –

-1

रेपो को कहीं और क्लोन करने के बारे में क्या, और वास्तविक चेकआउट और ताजा क्लोन दोनों पर गिट लॉग करने के बारे में यह देखने के लिए कि क्या आपको वही चीज़ मिलती है।

0

मुझे पार्टी के लिए देर हो सकती है, लेकिन यह ऐसा कुछ है जो मुझे बहुत लंबे समय तक खराब कर देता है। मेरे अनुभव में, मैं नहीं बल्कि जो परिवर्तन लंबित हैं देखने के लिए, की तुलना में मेरे कार्य प्रतिलिपि को अपडेट और उन परिवर्तनों के साथ सौदा चाहेगा ...

इस ~/.gitconfig फाइल करने के लिए चला जाता है:

[alias] 
     diffpull=!git fetch && git diff origin/`git rev-parse --abbrev-ref HEAD`..HEAD 

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

1

मैं इन दो आदेशों का उपयोग करता हूं और मैं फ़ाइलों को बदलने के लिए देख सकता हूं।

  1. पहले क्रियान्वित Git लाने, यह (उत्पादन का हिस्सा) इस तरह उत्पादन देता है:

    ... 
    72f8433..c8af041 develop -> origin/develop 
    ...

इस आपरेशन हमें दो देता आईडी प्रतिबद्ध है, पहले वर्ष एक है, और दूसरा नया होगा।

  1. फिर Git diff का उपयोग कर

    git diff 72f8433..c8af041 | grep "diff --git"

यह आदेश फ़ाइलों को अद्यतन किया जाएगा सूची जाएगा इन दो प्रतिबद्ध तुलना:

diff --git a/app/controller/xxxx.php b/app/controller/xxxx.php 
diff --git a/app/view/yyyy.php b/app/view/yyyy.php 

उदाहरण के लिए ऐप/नियंत्रक/xxxx.php और ऐप/देखें/yyyy.php अपडेट किया जाएगा।

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