ऐसा लगता है कि आपकी schema.rb गिट में चेक की गई है, जो एक अच्छी बात है। तो जब आप शाखाएं स्विच करते हैं, तो आपकी schema.rb आपकी वास्तविक डीबी स्कीमा से अलग होती है।
रेक डीबी: माइग्रेट केवल schema.rb में स्कीमा संस्करण की जांच करेगा और यदि डेटाबेस संस्करण छोटा है तो यह सभी "लंबित" माइग्रेशन चलाएगा। अगर माइग्रेशन चलाया जाता है तो यह केवल schema.rb फ़ाइल को पुन: उत्पन्न करता है।
इस मामले में जहां आपकी वास्तविक स्कीमा schema.rb में रिपोर्ट किए गए संस्करण की तुलना में उच्च संस्करण पर है, यह केवल एकमात्र सुरक्षित चीज़ है, जो कुछ भी नहीं है। तर्क यह है कि इसे अद्यतित करने के लिए माइग्रेशन फ़ाइल नहीं हो सकती है, या डेटाबेस संचालन तालिका/छंटनी या कुछ समान रूप से खराब बनाने के लिए मजबूर हो सकता है। बेमेल संस्करणों के अन्य किनारे के मामले हैं लेकिन मुझे लगता है कि आपको विचार मिलता है।
तो यदि आप शाखाओं के बीच डेटा रखना चाहते हैं तो माइग्रेशन मानसिकता में काम करने के लिए आपके पास कुछ विकल्प हैं।
ए) शाखाओं के बीच आपको जो भी डेटा चाहिए, वह डीबी बीजों की फाइल में रहता है। फिर आप किसी भी चिंताओं के बिना अपना डीबी ड्रॉप/बना सकते हैं
बी) शाखाओं को स्विच करने से पहले अलग-अलग माइग्रेशन को वापस रोल करें। नई शाखा में उन्हें फिर से रोल करें।
सी) धोखा, और schema.rb हटाएं और रेक रन डीबी पुन: चलाएं: माइग्रेट करें। यह धोखाधड़ी है क्योंकि, यह आसानी से आपके संस्करण नियंत्रण में dataloss, असंगत schema.rb का कारण बन सकता है, और अन्य टीम के सदस्यों के लिए सिरदर्द का कारण बन सकता है क्योंकि आपके प्रवासन कोई समझ नहीं लेते हैं।
और सलाह का एक शब्द। यदि आपने इसे गिट करने के लिए प्रतिबद्ध किया है, तो पुरानी माइग्रेशन फ़ाइल को न बदलें। बस एक नया बनाओ। वे एक तार्किक ढेर बनाते हैं और क्रमशः आपकी स्कीमा को बदलने के लिए हैं।