मैंने जिथब पर एक कंपनी प्रोजेक्ट के लिए क्लासिक ओएसएस रखरखाव/योगदानकर्ता गिट वर्कफ़्लो लागू किया है, हालांकि एक किनारे का मामला कुछ अजीब परिणाम उत्पन्न करता है जो मुझे यकीन नहीं है कि कैसे घूमना है।गिट पुल - रीबेस अपस्ट्रीम और गिट पुश मूल गैर-फास्ट-फॉरवर्ड को अस्वीकार करता है?
आइए कहें कि एक सामान्य प्रोजेक्ट है जिसे मैंने फोर्क किया और अपस्ट्रीम रिमोट को अद्यतित रखने के लिए जोड़ा।
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 एक भी पर सहयोग की कल्पना कर सकते में बहुत असहज कर रहा हूँ बिना जबरदस्त धक्का के साथ एक दूसरे के पैर की उंगलियों पर कांटा और कदम।
कोई विचार? मैं क्या खो रहा हूँ?