क्या एक जीट कमिट में 2 से अधिक माता-पिता हो सकते हैं?


48

में इस दस्तावेज़ में यह उल्लेख किया गया है

एक प्रतिबद्ध वस्तु में किसी भी माता-पिता की संख्या हो सकती है।

लेकिन मेरी समझ से, केवल एक मामला जहां एक कमिट में 1 से अधिक माता-पिता होंगे जब एक मर्ज हुआ है, और उस स्थिति में केवल दो माता-पिता होंगे। तो मेरा सवाल यह है कि क्या एक कमिट में 2 से अधिक माता-पिता हो सकते हैं? अगर ऐसा हैं तोह कब?


11
github.com/torvalds/linux/commit/… - मुझे नहीं लगता कि गितुब को पता है कि 27-तरह के अंतर को कैसे प्रदर्शित किया जाए, लेकिन बेझिझक रिपॉजिटरी को क्लोन करें और इसे खुद देखें।
user253751

जवाबों:


43

आप अपनी वर्तमान शाखा में एक से अधिक मर्ज करने के लिए गिट मर्ज का उपयोग कर सकते हैं। से man git-merge(या git help merge):

git-merge - एक साथ दो या अधिक विकास इतिहासों में शामिल हों

जब आप ऐसा करेंगे तो परिणाम दो से अधिक अभिभावकों के लिए प्रतिबद्ध होगा।


33
एक से अधिक शाखा का विलय (अर्थात दो से अधिक माता-पिता के साथ एक संबंध) बोलचाल की भाषा में "ऑक्टोपस मर्ज" के रूप में जाना जाता है। यह भी GitHub के लोगो और शुभंकर, आठ पैरों वाली बिल्ली के लिए प्रेरणा का स्रोत है: इसे मूल रूप से ऑक्टोपस कहा जाता था, लेकिन अधिक कॉर्पोरेट-अनुकूल ऑक्टोकैट का नाम बदल दिया गया था।
जोर्ग डब्ल्यू मित्तग

4
एक सीरीज़ के बजाय तीन या अधिक शाखाओं को एक ही प्रतिबद्ध में मर्ज करने के क्या फायदे हैं?
Tor Klingberg

2
@TorKlingberg क्लीनर इतिहास, लेकिन रिमोट रिपेरिटरी में धकेलने से पहले अंतिम उत्पाद का परीक्षण करना सुनिश्चित करें।
फेरीबिग

5
@KasunSiyambalapitiya - एक विशेष गितुब रेपो में कई उदाहरण हैं । कई ऑक्टोपस में से एक उस रेपो में विलीन हो जाता है जिसमें 27 माता-पिता शामिल होते हैं
डेविड हैम्मन

1
@ JörgWMittag सचमुच में कोई भी सच नहीं है। स्रोत: पांच साल के लिए गिटहब में काम किया।
gjtorikian

5

हाँ, कैसे 100k माता-पिता के बारे में?

यहाँ 100k कमिट के मर्ज के साथ एक लाइव GitHub उदाहरण है: https://github.com/cirosantilli/test-octopus-100k इस स्क्रिप्ट के साथ उत्पन्न ।

सामान्य ज्ञान

60 से अधिक माता-पिता के साथ लिनुस को पसंद नहीं है: https://www.destroyallsoftware.com/blog/2017/the-biggest-and-weirdest-commits-in-linux-kernel-git-history

यह खींचा गया है, और यह ठीक है, लेकिन स्पष्ट रूप से "ऑक्टोपस मर्ज ठीक हैं" और "मसीह के बीच एक संतुलन है, यह ऑक्टोपस नहीं है, यह एक कैथुलू मर्ज है"।

Git प्रतिबद्ध ऑब्जेक्ट के लिए प्रारूप पर एक नज़र है

https://stackoverflow.com/questions/22968856/what-is-the-file-format-of-a-git-commit-object/37438460#37438460

उस विश्लेषण से, हम देख सकते हैं कि माता-पिता की सूची की सूची मनमाने ढंग से अलग की गई अलग प्रकार की सूची है:

parent {parent_1_sha}
parent {parent_2_sha}
...
parent {parent_N_sha}

और इसलिए माता-पिता की एक मनमानी संख्या की अनुमति है।

न्यूनतम उदाहरण

स्क्रिप्ट:

#!/usr/bin/env bash
set -eu

mkdir tmp
cd tmp
git init

touch root
git add .
git commit -m root
sha_root="$(git log -1 --format="%H")"

touch 1
git add .
git commit -m 1
sha1="$(git log -1 --format="%H")"

git reset --hard "$sha_root"
touch 2
git add .
git commit -m 2
sha2="$(git log -1 --format="%H")"

git reset --hard "$sha_root"
touch 3
git add .
git commit -m 3
sha3="$(git log -1 --format="%H")"

git merge -m merge "$sha1" "$sha2"

आउटपुट:

*-.   2d2a6c2 (HEAD -> master) merge
|\ \  
| | * 2300c18 2
| * | 7e096cb 1
| |/  
* | 50aa125 3
|/  
* a1e94fd root

मुझे यकीन नहीं है कि अगर GitHub सिर्फ उस परिमाण के एक विलय को संभाल नहीं सकता है या यदि आपने इसे एक निजी भंडार के रूप में छोड़ दिया है। या अगर GitHub सिर्फ कुछ असंबंधित मुद्दा है। लेकिन परवाह किए बिना, 100k मर्ज लिंक मेरे लिए 500 त्रुटि है।
8bittree

@ 8 बिट्ट्री यह संभाल नहीं सकती, प्राइवेट रेपो 400 :-) github.com/isaacs/github/issues/1344
Ciro Santilli 新疆 it it 法轮功 事件

FOSS अधिवक्ताओं और Lovecraft पहनने वाले दाढ़ी वाले सैंडल के बीच यह क्या संबंध है कि मैं बार-बार मुठभेड़ करता हूं?
न्यूट्रिनो

3

विलय होने पर आप एक से अधिक शाखाएँ निर्दिष्ट कर सकते हैं।

उदाहरण के लिए:

git merge branch_A branch_B branch_C [...]

फिर प्रतिबद्ध में अधिक माता-पिता हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.