2016-01-08 8 views
5

क्या कुछ प्रतिबद्धता के लिए "संपार्श्विक" काम करने के लिए कोई तरीका है (जो समान लाइनों को संपादित कर रहे हैं और परिणामस्वरूप संघर्ष करेंगे)?गिट रिवर्ट: वास्तविक वापसी से पहले संभावित विरोधाभासी प्रतिबद्धताओं की पहचान करना संभव है?

एक बहुत ही सरल उदाहरण

$ git init 
$ echo test > test 
$ git add test 
$ git commit -m "First commit" 
$ echo test1 > test 
$ git commit -am "Second commit" 
$ git l 
* 95a29dd Second commit 
* 30a68e6 First commit 
$ type test 
test1 

जो भी कारण रहा 30a68e6 वापस करना चाहते हैं के लिए इस बिंदु पर यह मानते हुए कि।

$ git revert 30a68e6 
error: could not revert 30a68e6... First commit 
hint: after resolving the conflicts, mark the corrected paths 
hint: with 'git add <paths>' or 'git rm <paths>' 
hint: and commit the result with 'git commit' 

जाहिर है, इस एक संघर्ष का परिणाम देगा, 95a29dd के बाद से, एक ही पंक्ति का संपादन किया।

क्या यह पता लगाना संभव है कि 30a68e6 को वापस करने से एक संघर्ष होगा, और यदि ऐसा है, तो क्या प्रतिबद्ध है (यानी 95a29dd)?

थोड़ा सा संदर्भ देने के लिए, मुझे इसकी आवश्यकता है, क्योंकि मुझे कुछ स्वचालित रूप से वापस करने की आवश्यकता है। इस मामले में, अगर मुझे पता है कि 30a68e6 वापस किया जाना चाहिए, तो मैं "संपार्श्विक" कामों की पहचान करने में सक्षम होना चाहता हूं, जिसे किसी भी संघर्ष से बचने के लिए पहले वापस किया जाना चाहिए (जैसे 30a68e6)। मुझे पता है कि सब कुछ 30a68e6..HEAD वापस कर रहा है, काम करेगा, लेकिन मैं उन कामों को वापस करने से बचना चाहता हूं जो 30a68e6 के साथ संघर्ष नहीं करेंगे।

+0

निकट से संबंधित: http://stackoverflow.com/q/29517440 क्या तुम कर सकते हो वापस लाएं आपरेशन के निकास की स्थिति की जांच, और, अगर यह अशून्य है, git revert --abort चलाने वापसी रद्द करने है/2541573 – Jubobs

+0

कुछ हद तक संबंधित: https://github.com/felipec/git-related – max630

उत्तर

0

git revert पूर्ववत करना आसान होना चाहिए। रिवर्ट के रिटर्न कोड को चेक करें, और git revert --abort चलाएं यदि यह असफल हो (वापसी कोड 1) या git reset --hard HEAD~1 यदि यह सफल हुआ (वापसी कोड 0) और आप इसे रखना नहीं चाहते हैं।

आप अपनी आवश्यकताओं के आधार पर इतिहास के माध्यम से git bisect के साथ इसे जोड़ सकते हैं।

+0

मुझे पता है कि गिट रिवर्ट को पूर्ववत कैसे करें, लेकिन इससे मुझे कोई जानकारी नहीं मिलती है कि –

+0

पर विवादित क्या होता है मुझे लगता है कि विलय करने वाला एल्गोरिदम हस्तक्षेप नहीं देखता काम करता है, इसलिए आपको द्विपक्षीय या किसी और चीज़ के साथ, हस्तक्षेप करने वाले कामों का मैन्युअल रूप से परीक्षण करने का कोई तरीका ढूंढना पड़ सकता है। – oyvind

+0

यह रुचि का हो सकता है: http://stackoverflow.com/q/8435343/1463246। यह लाइनों के लिए 'गिट लॉग' के बारे में है। – oyvind

2

(अस्वीकरण:। इस उत्तर Is there some kind of 'git rebase --dry-run', which would notify me of conflicts in advance? करने के लिए अपने जवाब के समान है)

क्या यह संभव है पहले से पता लगाने के लिए कि वापस लाने में 30a68e6 एक संघर्ष में परिणाम होगा, और यदि हां तो किस लिए प्रतिबद्ध के साथ (यानी 95a29dd)?

लेखन के समय (गिट v2.7.0), गिट वास्तव में एक वापसी का प्रयास करने से पहले पता लगाने का कोई तरीका नहीं देता है, चाहे आप संघर्ष में भाग ले रहे हों या नहीं।

हालांकि, यदि आप git revert चलाते हैं और एक संघर्ष दबाते हैं, तो प्रक्रिया रुक जाएगी और एक गैर-शून्य स्थिति से बाहर निकल जाएगी।

git revert ... || git revert --abort

+0

उत्तर के लिए धन्यवाद। यह आंशिक रूप से काम करता है, क्योंकि यह अभी भी मुझे यह पता लगाने की अनुमति नहीं देता कि कौन सी प्रतिबद्धता संघर्ष कर रही थी। या क्या मैं कुछ न कुछ भूल रहा हूं? –

संबंधित मुद्दे