2012-04-10 21 views
39

क्या रिमोट के रिफ्लॉग को देखना संभव है? यही है, मैं जानना चाहता हूं कि git reflog का आउटपुट किसी अन्य दूरस्थ मशीन पर क्या है।गिट क्या मैं रिमोट के रिफ्लॉग को देख सकता हूं?

ध्यान दें, मैं रिमोट ट्रैकिंग शाखाओं (जैसे मूल/मास्टर के रूप में) की reflog के लिए पूछ नहीं कर रहा हूँ, मैं क्या reflog अन्य मशीन पर कहते हैं के लिए पूछ रहा हूँ।

+1

यदि आपके पास रिमोट सिस्टम की फाइल सिस्टम तक पहुंच है (जो कई बार एक नंगे रिपोज़ है) तो आपके पास हमेशा गिट रीफ्लॉग चलाने का विकल्प होता है। लेकिन इस तरह की पहुंच सामान्य रूप से संभव नहीं है। मुझे सर्वर पक्ष पर रीफ्लॉग की समीक्षा करना संभव बनाने के लिए, गिट सर्वर (केवल पढ़ने-योग्य फ़ाइल शेयर का उपयोग करके) पर यह संभव बनाने की आदत है। –

उत्तर

26

उत्तर मूल रूप से "नहीं" (उस मशीन को छोड़कर) है, क्योंकि रीफ्लॉग कुछ रिफ-नाम के स्थानीय रूप से बनाए गए पुन: असाइनमेंट का लॉग है। अनिवार्य रूप से, हर बार जब आप git update-ref -m msg <name> <target> चलाने अद्यतन लॉग होता है ... स्थानीय स्तर पर: .git/logs/<name> एक पंक्ति संलग्न हो जाता है:

$ git update-ref -m foo HEAD HEAD^ 
$ tail -1 .git/logs/HEAD 
2418b6ba8fd0289933c9351260a272b8e410867f 8d945134b0cead535d66af29c8eb4228b5dc3763 [redacted] <[redacted]> 1334106483 -0600  foo 

(संदेश से पहले बात, इस मामले foo में, नहीं रिक्त स्थान बल्कि एक टैब है, मैं एसओ प्रयोजनों के लिए इसे विस्तारित किया गया)। संकल्पनात्मक रूप से, एक शाखा टिप को स्थानांतरित करने वाली हर चीज git update-ref इसे करने के लिए आमंत्रित करती है (कुछ शैल स्क्रिप्ट हैं और सचमुच ऐसा करते हैं, अन्य लोग केवल सी कोड को आमंत्रित करते हैं जो सभी फाइल-अपडेटिंग करता है) ... और .git/logs में सबकुछ रिफ्लॉग बनाता है।

यदि अंतर्निहित गिट: // और/या ssh: // प्रोटोकॉल में चीजें हैं जो आपको रिफ्लॉग पर पहुंचने देती हैं, तो यह करती है, लेकिन जहां तक ​​मुझे पता है कि वहां नहीं है।

22

बंद मौका है कि रिमोट मशीन एक GitHub भंडार है पर,

  1. सबसे पहले उपयोग Github के घटनाक्रम एपीआई को पुनः प्राप्त करने SHA प्रतिबद्ध।
    curl https://api.github.com/repos/<user>/<repo>/events

  2. अनाथ की SHA पहचानें प्रतिबद्ध-आईडी जो अब किसी भी शाखा में मौजूद है।

  3. अगला, अनाथ प्रतिबद्धता को इंगित करने वाली एक नई शाखा बनाने के लिए गिथब के रेफरी एपीआई का उपयोग करें।

    curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X POST -d '{"ref":"refs/heads/D-commit", "sha":"<orphan-commit-id>"}' https://api.github.com/repos/<user>/<repo>/git/refs

    SHA अपने स्थानीय भंडार में कदम 2.

  4. अंत में git fetch नव निर्मित शाखा में पहचान के साथ उपरोक्त आदेश में <orphan-commit-id> बदलें।
    वहां से आप अपने काम में प्रतिबद्धताओं को वापस ले सकते हैं या मर्ज कर सकते हैं।

वास्तविक उदाहरण के लिए this article देखें।

+4

बहुत बहुत धन्यवाद! कमांड लाइन का उपयोग करने के इच्छुक लोगों के लिए, आप केवल https://github.com/ //commits/ खोलकर चरण 3 को बाईपास कर सकते हैं और सीधे इसमें से एक नई शाखा बना सकते हैं "पेड़:" ड्रॉपडाउन। फिर इसे सामान्य रूप से लाएं। – waldyrious

+0

यदि आपको कोई संदेश मिलता है: "नहीं मिला" त्रुटि, इसका मतलब है कि आपको प्रमाणित करने की आवश्यकता है उदा। access_token क्वेरी स्ट्रिंग पास करके। –

+0

मेरे लिए अनाथ प्रतिबद्धता आईडी के * SHA को ट्रैक करने का सबसे आसान तरीका * CircleCI (या [यहां सीआई सेवा डालें] पर अंतिम निर्माण को देखना था)। – samjewell

2

गिटहब पर, यदि आपने विलय किए गए परिवर्तनों को लाने के लिए पहले मास्टर पर git push --force गलती की थी और इस बीच विलय की गई शाखा को हटा दिया गया था (हाँ, यह मेरे साथ हुआ), तो आप मर्ज किए गए पुल अनुरोध की तलाश कर सकते हैं और जा सकते हैं करने के लिए अनुभाग, जैसे प्रतिबद्धता:

enter image description here

तो फिर तुम पिछले पर जाने के लिए प्रतिबद्ध है और <> बटन पर क्लिक करें (जो शीर्षक है "इतिहास में इस बिंदु पर भंडार ब्राउज़ करें")।

यह आपको इतिहास के "हटाए गए" बिंदु पर लाएगा। यहां से आप कर सकते हैं:

  • एक नई शाखा बनाएं और फिर एक नया पुल अनुरोध खोलें (अनुशंसा की जाती है कि परिवर्तन किसी अन्य भंडार से आता है)।
  • एक नया पुल अनुरोध खोलें (आपके भंडार के अंदर काम करने के लिए अनुशंसित)।
संबंधित मुद्दे