मुझे चिंता है कि अगली बार जब मुझे इसकी आवश्यकता होगी तो मैं इस निफ्टी फीचर के बारे में भूल सकता हूं।
Git 2.13 (Q2 2017) बताता है कि इस पुश ऑप्शन के खिलाफ "सुरक्षा" क्यों नहीं है, क्योंकि अगर आप इसे स्तर पर नहीं भूलते हैं git push, तो भी इसे अनदेखा किया जा सकता है।
देखें f17d642 प्रतिबद्ध (19 अप्रैल 2017) से Ævar Arnfjörð Bjarmason ( avar) ।
( जूनियो सी gitsterहमानो द्वारा विलय - - में ४६bdfa3 , २६ अप्रैल २०१io )
push: --force-with-leaseकई रिमोट के साथ दस्तावेज़ और परीक्षण
उन मामलों के लिए दस्तावेज़ और परीक्षण जहां एक ही URL को इंगित करने वाले दो रीमोट हैं, और एक पृष्ठभूमि लाने और बाद में git push --force-with-leaseअन-अपडेट किए गए संदर्भों को बंद नहीं करना चाहिए जिन्हें हमने नहीं लिया है।
Microsoft के VSC जैसे कुछ संपादकों की पृष्ठभूमि में ऑटो-फ़ेच करने की सुविधा है, यह उनके द्वारा प्रस्तुत किए--force-with-lease--force-with-lease=<refname> गए दस्तावेज़ों को ध्यान में रखते हुए और उनके द्वारा प्रस्तावित सुरक्षा को बायपास करता है।
तो अब के लिए प्रलेखन मेंgit push शामिल हैं:
सुरक्षा पर सामान्य ध्यान दें: इस विकल्प की आपूर्ति एक अपेक्षित मूल्य के बिना, यानी के रूप में --force-with-leaseया --force-with-lease=<refname>
बहुत बुरी तरह से किसी भी चीज के साथ इंटरैक्ट करता है, जो कि git fetchरिमोट पर पृष्ठभूमि में धकेलने के लिए रिमोट पर चलता है , जैसे git fetch origin
क्रोनजॉब में आपकी रिपॉजिटरी पर।
यह जो सुरक्षा प्रदान करता है वह यह सुनिश्चित कर रहा --forceहै कि बाद में आपके काम पर आधारित परिवर्तन क्लोबर्ड नहीं थे, लेकिन यदि पृष्ठभूमि की कुछ प्रक्रिया बैकग्राउंड में refs को अपडेट कर रही है तो यह बहुत ही पराजित है। हमारे पास दूरस्थ ट्रैकिंग जानकारी के अलावा ऐसा कुछ भी नहीं है जिसे आप जिस रेफरी के पास जाने के लिए उम्मीद कर रहे हैं और जिसे क्लोब करने के लिए तैयार हैं।
यदि आपका संपादक या कोई अन्य सिस्टम git fetchआपके लिए पृष्ठभूमि में चल रहा है तो इसे कम करने का एक तरीका है कि आप दूसरे रिमोट को सेट करें:
git remote add origin-push $(git config remote.origin.url)
git fetch origin-push
अब जब पृष्ठभूमि प्रक्रिया चलती है git fetch originतो संदर्भ origin-pushअद्यतन नहीं किए जाएंगे, और इस तरह जैसे आदेश होते हैं:
git push --force-with-lease origin-push
जब तक आप मैन्युअल रूप से नहीं चलेंगे तब तक असफल रहेंगे git fetch origin-push।
यह विधि निश्चित रूप से किसी ऐसी चीज से पूरी तरह से पराजित होती है, जो चलती है git fetch
--all, उस स्थिति में आपको या तो इसे निष्क्रिय करना होगा या कुछ और करना होगा जैसे:
git fetch # update 'master' from remote
git tag base master # mark our base point
git rebase -i master # rewrite some commits
git push --force-with-lease=master:base master:master
यानी baseआपके द्वारा देखे गए अपस्ट्रीम कोड के संस्करणों के लिए एक टैग बनाएं और फिर उसे अधिलेखित करने के लिए तैयार हैं, फिर इतिहास को फिर से लिखें, और अंत में धक्का परिवर्तन को बल दें masterयदि दूरस्थ संस्करण अभी भी है base, भले ही आपके स्थानीय remotes/origin/masterको अपडेट किया गया हो। पृष्ठभूमि।
rmकरने की तरहrm -i; आप किसी दिन सर्वर पर एक महत्वपूर्ण फ़ाइल भूल जाएंगे और हटा देंगे। अपने स्वयं के उपनाम के साथ जाने से यह समस्या नहीं होती है :)