- बड़े बदलावों को छोटे, review करने योग्य layers में बाँटने वाले Stacked pull requests अब सभी repositories में public preview के रूप में चरणबद्ध तरीके से उपलब्ध कराए जा रहे हैं
- हर PR अपने ठीक नीचे वाली layer को target करता है, जिससे टीम के सदस्य सीमित दायरे वाले diff का parallel में independently review कर सकते हैं
- सबसे नया PR merge करने पर उसके नीचे की सभी unmerged layers भी एक साथ शामिल हो जाती हैं, और अगर केवल कुछ हिस्से merge किए जाएँ तो ऊपर वाले PR अपने-आप rebase होकर target बदल लेते हैं
- मौजूदा PR review, required checks, branch protection, और merge requirements वैसे ही लागू रहते हैं, और stacks को GitHub.com, CLI, mobile app, और GitHub Copilot में संभाला जा सकता है
- public preview आने वाले कुछ दिनों में सभी repositories तक बढ़ाया जाएगा, और Merge queue support अगले कुछ हफ्तों में धीरे-धीरे उपलब्ध होगा
छोटे बदलावों को stack करने वाली PR संरचना
- बड़े बदलावों को कई छोटे और focused PR में बाँटा जाता है, और हर PR को क्रमबद्ध change layer के रूप में व्यवस्थित किया जाता है
- पहले बदलाव के लिए branch और PR बनाने के बाद, उसके ऊपर नई branch और PR जोड़ी जाती हैं, और हर PR अपने ठीक नीचे वाली layer को target करता है
- इससे एक बहुत बड़े PR को review करने या कई branches को बार-बार manually rebase करने की असुविधा कम होती है
- Next.js टीम का कहना है कि बड़े features release करते समय भी वे individual changes को छोटा रख पाए, जिससे PR review आसान हो गया
stack बनाना और working environment
- CLI extension को इस कमांड से install किया जा सकता है
gh extension install github/gh-stack
- GitHub.com, GitHub CLI, और GitHub mobile app में stacks बनाए और manage किए जा सकते हैं
- GitHub Copilot जैसे coding agents में
gh-stack skill का इस्तेमाल किया जा सकता है
layer-दर-layer independent review
- stack के अंदर कोई PR खोलने पर पूरे बदलाव के बजाय केवल उस layer का diff review किया जा सकता है
- PR के ऊपर दिखने वाले stack map में यह देखा जा सकता है कि मौजूदा बदलाव पूरे काम में कहाँ स्थित है
- टीम के सदस्य अलग-अलग layers को parallel में review कर सकते हैं, इसलिए बाद का काम review पूरा होने तक रुका नहीं रहता
- मौजूदा branch protection rules और layer-based review को साथ में लागू करके हर चरण की quality manage की जा सकती है
- TED ने बताया कि AI अपनाने के बाद development productivity बढ़ी, लेकिन PR बड़े होने से review bottleneck बनने लगा; इसके बाद उन्होंने बदलावों को dependency order के अनुसार छोटे logical units में बाँटा, जिससे review की speed और accuracy बढ़ी
पूरे stack या उसके कुछ हिस्से को merge करना
- जब सबसे नया PR तैयार हो जाए, तो उसे merge करने पर वह PR और उसके नीचे की सभी unmerged layers एक साथ लागू हो जाती हैं
- stack के निचले हिस्से की एक या अधिक layers को चुनकर पहले merge भी किया जा सकता है
- ऊपर वाले PR खुले रहते हैं
- merged बदलावों के अनुसार वे अपने-आप rebase होते हैं और target branch भी बदल जाती है
- मौजूदा branch protection, required checks, और merge requirements लागू रहते हैं, जिससे
main में जाने वाले बदलावों पर नियंत्रण बना रहता है
- पूरे stack के साथ-साथ किसी एक layer या कुछ selected layers को भी selectively merge किया जा सकता है
public preview और support timeline
- Stacked pull requests को आने वाले कुछ दिनों में सभी repositories में public preview के रूप में चरणबद्ध rollout किया जाएगा
- Merge queue support अगले कुछ हफ्तों में धीरे-धीरे rollout होगा
- इस्तेमाल की विस्तृत जानकारी stacked pull requests documentation में देखी जा सकती है, और stacks discussion में feedback लिया जा रहा है
1 टिप्पणियां
Hacker News टिप्पणियाँ
मैंने प्रीव्यू कुछ समय इस्तेमाल किया, और हैरानी इस बात की है कि इतने अनसुलझे मुद्दों के बावजूद इसे व्यापक रूप से जारी किया जा रहा है
उदाहरण के लिए, पूरे स्टैक को merge करना कई स्थितियों में पूरी तरह टूट जाता है: https://github.com/github/gh-stack/discussions/212
इन्हें एक-एक करके merge किया जा सकता है, लेकिन squash merge और required review साथ इस्तेमाल करने पर स्टैक के हर PR के लिए फिर से approval लेना पड़ता है, जिससे stacked PR का सबसे बड़ा फ़ायदा खत्म हो जाता है
gh stackथोड़ा manual काम कम करता है, लेकिन फिर भीgit rebaseको ठीक से समझना ज़रूरी है. अगर local branch remote के साथ sync में नहीं है, तो UI द्वारा सुझाया गयाgh stack rebaseभी fail हो जाता है, और tool यह नहीं बताता कि कारण क्या हैदूसरी ओर, stack UI सरल है और PRs के बीच संबंधों को काफ़ी अच्छी तरह दिखाता है, इसलिए यह पसंद आया. यह केवल workflow को आसान बनाता है, इस मान्यता पर कि PRs को stack करने की वजह पहले से मौजूद है; यह कोई नई capability देने वाला tool नहीं है
अंदरूनी CPRMC(Create Pull Request Merge Commit) conflict होने की संभावना से लेकर इस बात तक जांचता है कि approvals वास्तव में बनने वाले commit से मेल खाते हैं या नहीं, ताकि यह तय किया जा सके कि PR merge के लिए तैयार है या नहीं
कई PRs को squash merge करने के लिए लगातार squash commits की गणना करनी पड़ती है और फिर उन्हें rules और reviews से दोबारा जोड़ना पड़ता है. पहला PR अपेक्षाकृत आसान है, लेकिन दूसरे से जटिलता बढ़ जाती है क्योंकि ancestor commits squash हो चुके होते हैं और branch में अपने मूल रूप में मौजूद नहीं रहते, और जिन स्थितियों में कई parents हों वे और भी कठिन हैं
अभी stack merge का 99% सफल हो रहा है, लेकिन इसे और बहुत ऊपर ले जाना टीम की सर्वोच्च प्राथमिकता है
mergingस्थिति में अटका रहामुझे लगा PR system में partial outage है, इसलिए मैंने GitHub status page तक देख लिया, लेकिन यह stacked PR feature का ही bug निकला
GitHub Stacked PRs टीम अब इसे अधिक व्यापक रूप से उपलब्ध करा रही है ताकि कोई भी stack बना सके: https://gh.io/stacks
वे खास तौर पर UI और CLI पर feedback चाहते हैं, और PR इस्तेमाल के अनुभव को बेहतर बनाने के लिए कई updates भी तैयार कर रहे हैं
यह GitHub के इतिहास की सबसे बड़ी releases में से एक है, क्योंकि यह Actions और protection rules से लेकर CLI और mobile app तक लगभग हर service को छूती है, इसलिए design decisions और internal workings पर सवालों के जवाब भी दिए जा सकते हैं
मैं पहले से अपने local UI में stacked PR dependencies को tree के रूप में देखता हूँ और हर PR की review/CI status manage करता हूँ, इसलिए अच्छा होगा अगर GitHub web UI में भी tree और status display हो
web UI में शायद stack के सबसे नीचे वाले PR को ही merge करने की सुविधा नहीं है, लेकिन चूँकि existing workflow और code साझा किए जा सकते हैं, उम्मीद है यह GitHub के default tools में भी आएगा
public repositories में उपयोगी होने के लिए यह एक महत्वपूर्ण feature लगता है, इसलिए हैरानी है कि इसे public preview से पहले उपलब्ध नहीं कराया गया
commits के आधार पर review/apply/edit करने वाली एक सही UI की बजाय, क्या इस approach की मूल प्रेरणा mailing list के patch series workflow को नज़रअंदाज़ करके लगभग 'patch series की series' चुनने के पीछे कोई खास insight थी
पिछले कई वर्षों में GitHub पर लागू हुए बदलावों में यह सबसे बड़े बदलावों में से एक है
दुनिया के सबसे बड़े code hosting platforms में से एक में stacked workflow आने से बहुत से developers ऐसे तरीके से परिचित हो सकते हैं जिसके अस्तित्व के बारे में भी वे पहले नहीं जानते थे
अगर यह मान्यता सही है कि stacks बेहतर software बनाते हैं, तो इससे वास्तव में बहुत से developers को मदद मिल सकती है
मैं जानना चाहता हूँ कि अच्छी तरह व्यवस्थित commits को commit-दर-commit review करने की तुलना में ऐसे stacked PRs के फ़ायदे क्या हैं
इससे भी बड़ा मुद्दा यह है कि बड़े AI-generated PRs के लिए शायद एक अलग review method की ज़रूरत है. जैसे function definition changes, call sites, और tests के क्रम में दिखाना—सिर्फ diff दिखाने का क्रम ही पठनीयता में बहुत बड़ा फ़र्क ला सकता है
जैसे literate programming code और गद्य को जोड़ती है, वैसे ही diff और explanation को जोड़ने वाले literate diff या literate PR की ज़रूरत हो सकती है, लेकिन मुझे अभी तक ऐसा कोई tool नहीं मिला
क्योंकि review unit यानी PR या diff एक सीमित बदलाव के रूप में बना रहता है, चर्चा उसी बदलाव पर केंद्रित रहती है, और feature बड़ा हो जाने पर भी PR खुद बहुत बड़ा नहीं होता
साथ ही, stack के अलग-अलग हिस्सों को अलग targets को सौंपा जा सकता है. जैसे external teams, उसी team के सहकर्मी, या बदलाव का उपयोग करने वाली teams—इस तरह reviewers को बाँटा जाए तो किसे किस चीज़ की approval देनी है, यह अस्पष्ट नहीं रहता
अगर GitHub review में change ID आ जाए ताकि rebase के बाद भी comments बने रहें, तो और भी अच्छा होगा
उसके बाद PRs को rebase और edit करना पड़ता है, जो किसी बड़े single PR के बाद के commits को ठीक करने जैसा ही है, लेकिन पूरे बदलाव पर इधर-उधर अस्थायी fix commits चिपकाने के बजाय आधारभूत बदलाव के commits को साथ रखना आसान हो जाता है
आधारभूत बदलाव पर चर्चा भी साथ में इकट्ठी रहती है, और अगर पूरा stack पहले से दिखा दिया जाए तो reviewer अंतिम दिशा समझ सकता है जबकि काम asynchronous तरीके से चलता रह सकता है
लोग commits को game save points की तरह इस्तेमाल करते हैं,
fix bug,do workजैसे messages छोड़ते हैं, औरgit rebase -iसे उन्हें साफ़ नहीं करते, इसलिए अगर required squash merge चालू न हो तो log बेकार commits से भर जाता हैऐसे developers के लिए PR ही commit है, और stacked PRs के ज़रिए वे पहली बार एक ऐसे ढाँचे का उपयोग कर पाते हैं जो एक बदलाव बनाने वाले कई commits जैसा दिखता है
merged diffs को मौजूदा HEAD के ऊपर rebase किया जा सकता है, और जो teams इसे support करती हैं वे आमतौर पर branches को सीधे manage नहीं करतीं बल्कि trunk पर काम करती हैं और हर नए बदलाव के आने पर rebase करती हैं
अगर feature के शुरुआती 4 हिस्से तैयार हों और 5वें में समस्या हो, तो पूरे काम को रोकने की ज़रूरत नहीं होती
यह जानने की जिज्ञासा है कि निर्भरता वाले PR अगर रैखिक इतिहास के बजाय tree structure बनाते हों, तो उसका समर्थन कब मिलेगा
Google में stacked changes इस्तेमाल करते समय ऐसे मामले आम थे, और अब parallel coding agents बढ़ने के साथ यह और भी ज़्यादा आम हो सकते हैं
यह जानने की जिज्ञासा है कि menu toggle button का pancake stack emoji (U+1F95E) stack feature की वजह से है या नहीं
मज़ाकिया अभिव्यक्ति अपने आप में ठीक है, लेकिन यह ऐसा UI था जो इस बात पर गहरा संदेह पैदा करता था कि आखिर हम क्या देख रहे हैं
इसे कुछ घंटों के लिए ही दिखाने के बाद सामान्य icon पर वापस ले जाने की योजना है
मैंने पहली बार खबर सुनने के समय से ही
gh stackCLI इस्तेमाल किया था, और टूल खुद बहुत अच्छा था, लेकिन preview approval मिलने के बाद जो web UI देखा, वह उम्मीदों से काफी कम निकलाapproval से पहले भी CLI काम को कई atomic PRs में बाँटने की automation आसानी से देता था, लेकिन push करने पर वे एक-दूसरे से जुड़े हुए नहीं बल्कि स्वतंत्र PRs की तरह दिखते थे
approval के बाद भी लगभग वही स्थिति है; ऊपर वाले छोटे navigation dropdown में सिर्फ उसी stack के दूसरे PRs दिखते हैं, इसलिए कोई अर्थपूर्ण UI बदलाव नहीं है
dropdown से CLI की कुछ सुविधाएँ की जा सकती हैं, लेकिन वे web पर files edit करने जैसी सहायक सुविधा के अधिक करीब हैं, और वास्तविक development workflow में CLI या IDE plugin ही केंद्र में रहेंगे
इतनी-सी वैकल्पिक UI सुविधा के लिए सामान्य सार्वजनिक उपलब्धता को इतने लंबे समय तक क्यों टाला गया, यह सवाल है; stack CLI तो घोषणा के समय से ही पहले से सामान्य रूप से उपलब्ध था
इसमें ऐसे views भी शामिल होंगे जो stack को लगातार दिखाएँगे ताकि हर स्तर के बीच जाने के लिए बहुत ज़्यादा click न करना पड़े और stack के प्रति हमेशा जागरूकता बनी रहे
jujutsu की अच्छी बात यह है कि branch को अपडेट करने पर उसी branch से निकली दूसरी branches भी अपने-आप rebase हो जाती हैं
review आसान बनाने के लिए काम बाँटते समय मैं अक्सर
jjपर स्विच करता हूँ, और Git से बने clone के साथ उसी working directory में साथ-साथ इस्तेमाल करने पर भी यह अच्छी तरह काम करता हैjj absorbभी शानदार हैयह बदलावों को सबसे नज़दीकी संबंधित change में ले जाता है, इसलिए कई PRs को प्रभावित करने वाले fixes भी आसानी से संभाले जा सकते हैं
Graphite इस्तेमाल करने के बाद stacked PRs के बिना GitHub पर लौटना बहुत मुश्किल हो गया
उम्मीद है कि GitHub के समर्थन से stacked PR workflow आम हो जाएगा और विशाल PRs के बजाय एक आसान विकल्प मिलेगा
git-spiceकी सिफारिश करता हूँयह इस्तेमाल में आसान और शक्तिशाली open source है, जबकि Graphite अपनी सुविधाओं की तुलना में अनावश्यक रूप से जटिल लगा
मेरी समझ में PR stacking दो स्थितियों में उपयोगी है
पहली, जब काम कई संबंधित repositories में फैला हो और उसे एक ही PR में जोड़ा न जा सके; दूसरी, जब पहले PR के review के दौरान उसी branch के ऊपर आगे के PRs stack करके काम को pipeline किया जाए
लेकिन यह सुविधा इन दोनों में से किसी को भी पूरा नहीं करती, बल्कि एक ही PR पर commits stack करने के एक और रूप जैसी लगती है
आम तौर पर atomic और सार्थक commits बनाए जा सकते हैं, फिर rebase के ज़रिए ऐसा flow बनाया जा सकता है जिसे reviewer आसानी से समझ सके, और reviewer चाहे तो commit-दर-commit भी देख सकता है
यह जानने की जिज्ञासा है कि इस तरीके में ऐसा कौन-सा अनूठा लाभ है जो मेरी नज़र से छूट रहा है