2012-03-12 15 views
8

मैंने जिथब पर एक कंपनी प्रोजेक्ट के लिए क्लासिक ओएसएस रखरखाव/योगदानकर्ता गिट वर्कफ़्लो लागू किया है, हालांकि एक किनारे का मामला कुछ अजीब परिणाम उत्पन्न करता है जो मुझे यकीन नहीं है कि कैसे घूमना है।गिट पुल - रीबेस अपस्ट्रीम और गिट पुश मूल गैर-फास्ट-फॉरवर्ड को अस्वीकार करता है?

आइए कहें कि एक सामान्य प्रोजेक्ट है जिसे मैंने फोर्क किया और अपस्ट्रीम रिमोट को अद्यतित रखने के लिए जोड़ा।

git clone [email protected]:kozhevnikov/<project>.git 
git remote add upstream [email protected]:<company>/<project>.git 

इस उदाहरण के प्रयोजनों के लिए यह कांटा कुछ काम करता है।

git reset --hard HEAD~5 && git push --force 

मैं इस कांटा पर काम करते हैं और कुछ करता धक्का, धक्का मेरा आखिरी प्रतिबद्ध और एक पुल अनुरोध मैं अपने कांटा के क्लोन अद्यतन यकीन है कि वहाँ कोई संघर्ष कर रहे हैं बनाने के लिए बनाने से पहले।

touch foo && git add foo && git commit -m foo && git push 
touch bar && git add bar && git commit -m bar 

git pull --rebase upstream master 

From github.com:<company>/<project> 
* branch   master  -> FETCH_HEAD 
First, rewinding head to replay your work on top of it... 
Applying: foo 
Applying: bar 

अब, जब मैं अपने कांटे पर धक्का देने की कोशिश करता हूं तो मुझे अस्वीकार कर दिया जाता है।

git push 

To [email protected]:kozhevnikov/<project>.git 
! [rejected]  master -> master (non-fast-forward) 
error: failed to push some refs to '[email protected]:kozhevnikov/<project>.git' 
To prevent you from losing history, non-fast-forward updates were rejected 
Merge the remote changes (e.g. 'git pull') before pushing again. See the 
'Note about fast-forwards' section of 'git push --help' for details. 

मुझे आगे क्या करना चाहिए? मैं चाहता हूं कि फू अनुरोध के लिए foo और bar commits शामिल है, हालांकि ...

जब मैं pull, पुल अनुरोध में डुप्लिकेट foo के साथ-साथ अतिरिक्त विलय भी होता है।

git pull 
Merge made by the 'recursive' strategy. 

git push 

गीथब पुल अनुरोध पर ऐसा दिखाई देता है।

Showing 4 unique commits by 1 author. 
12345 
kozhevnikov foo 4 minutes ago 
67890 
kozhevnikov foo 4 minutes ago 
abcde 
kozhevnikov bar 2 minutes ago 
fghij 
kozhevnikov Merge branch 'master' of github.com:kozhevnikov/<project> just now 

जब मैं git pull --rebase बजाय pull, सबसे अच्छे रूप शामिल कर लेंगे दूसरे लोगों की मेरी पुल अनुरोध में करता है (रीसेट से उन), और सबसे खराब यह मेरे इस विलय के विरोध देता है।

जब मैं git push --force किसी भी pull या --rebase यह पूरी तरह से काम करता है, फिर भी मैं हर किसी के लिए कह रही है बल प्रयोग या यह मानक कार्यप्रवाह का हिस्सा बनाने के रूप में मैं कुछ लोगों को या एक छोटे से subteam एक भी पर सहयोग की कल्पना कर सकते में बहुत असहज कर रहा हूँ बिना जबरदस्त धक्का के साथ एक दूसरे के पैर की उंगलियों पर कांटा और कदम।

कोई विचार? मैं क्या खो रहा हूँ?

उत्तर

16

जब आप

git pull --rebase upstream master 

आप अपने खुद के इतिहास पुनः लिख रहे हैं, जब से तुम अद्यतन नदी के ऊपर भंडार पर अपने मास्टर शाखा रिबेसिंग कर रहे हैं। जब आप अपने रिसाव रेपो को अपने फोर्क गिट शिकायत करते हैं तो शिकायत करते हैं। आपको --force

git push --force origin master 
के साथ धक्का देना होगा
संबंधित मुद्दे