मैं git सबट्री का उपयोग करके प्रयोग कर रहा हूं और निम्नलिखित स्थिति में चला गया हूं।
मैंने अपने रेपो में एक बाहरी परियोजना को जोड़ने के लिए git सबट्री का उपयोग किया, मैंने जानबूझकर अपस्ट्रीम परियोजना के लिए सभी इतिहास को रखा क्योंकि मैं परियोजना के इतिहास को संदर्भित करने में सक्षम होना चाहता हूं और बाद में अपस्ट्रीम परियोजना में वापस योगदान करना चाहता हूं।
जैसा कि यह पता चला है, अपस्ट्रीम परियोजना में एक और योगदानकर्ता ने गलती से एक बड़ी फाइल को मास्टर शाखा में धकेल दिया। इसे ठीक करने के लिए, अपस्ट्रीम परियोजना ने इतिहास को फिर से लिखा और मास्टर पर धकेल दिया। अपना "मोनोरेपो" बनाते समय, मैंने इस कमिट को शामिल किया और मैं इसे हटाना भी चाहूंगा।
उपशीर्षक के नए इतिहास को दर्शाने के लिए मैं अपनी रिपॉजिटरी को कैसे अपडेट कर सकता हूं?
मेरा पहला प्रयास सबट्री और सभी इतिहास को पूरी तरह से हटाने के लिए फ़िल्टर-शाखा का उपयोग करना था।
git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch upstream-project-dir' --prune-empty HEAD
एक बार सबट्री के पुराने संस्करण को हटा दिए जाने के बाद, मैं नए अपस्ट्रीम मास्टर का उपयोग करके सबट्री को फिर से जोड़ सकता हूं। हालाँकि, यह काम नहीं किया क्योंकि किसी कारण से कमिट हिस्ट्री अभी भी गिट लॉग आउटपुट में दिखाई देती है।
अपडेट करें
मैंने एक न्यूनतम प्रतिलिपि प्रस्तुत करने योग्य उदाहरण बनाने के लिए कदम उठाए हैं।
सबसे पहले एक खाली गिट रेपो बनाएं।
git init test-monorepo cd ./test-monorepo
एक प्रारंभिक प्रतिबद्ध बनाएँ।
echo hello world > README git add README git commit -m 'initial commit'
अब किसी बाहरी प्रोजेक्ट के लिए एक सबट्री जोड़ें।
git remote add thirdparty git@github.com:teivah/algodeck.git git fetch thirdparty git subtree add --prefix algodeck thirdparty master
मोनोरपो पर कुछ कमिट करें
echo dont panic >> algodeck/README.md git commit -a -m 'test commit'
अब सबट्री को हटाने के लिए गिट फ़िल्टर-ब्रांच का उपयोग करने का प्रयास करें।
git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch algodeck' --prune-empty HEAD
जीआईटी लॉग आउटपुट की जांच करें, मैं केवल मेरी प्रारंभिक प्रतिबद्धता को देखने की उम्मीद कर रहा हूं।
git log
git gc --prune=now
केवल उन कमिट्स को डिलीट नहीं करेगा, जो दिखाई नहीं देते हैं git log
?
git log
, कोई तर्क नहीं और मैं अभी भी पुराने कमिट्स को देखता हूं।