3 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超13個(gè)贊
我已經(jīng)將其轉(zhuǎn)換為健壯的腳本,并保存在我的git-extensions存儲(chǔ)庫(kù)中:
$ git-urebaselocalbr --help
Rebase all / the last committed N local branches (except for the current branch
and master) to the updated upstream head.
Usage: git-urebaselocalbr [--continue|--skip|--abort] [--branches "<branch1> ..."] [N] [-i|--interactive] [options]

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超6個(gè)贊
我相當(dāng)確定沒(méi)有辦法自動(dòng)執(zhí)行此操作。請(qǐng)記住,“ git rebase master”還可以將您帶回到需要您解決合并沖突的外殼程序中,因此,如果您要編寫(xiě)腳本來(lái)自動(dòng)化所有這些操作,則需要考慮到這一點(diǎn)。
但是,您可以相當(dāng)輕松地跟蹤哪些分支需要更新。嗯,對(duì)于任何分支,如果分支不是最新的wrt(即僅在master之上提交),“ git rev-list branch..master”將產(chǎn)生輸出。因此,您需要遍歷除master以外的所有本地頭來(lái)生成報(bào)告(nb“ git show-branch”將大致執(zhí)行此操作):
git for-each-ref 'refs/heads/*' | \
while read rev type ref; do
branch=$(expr "$ref" : 'refs/heads/\(.*\)' )
revs=$(git rev-list $rev..master)
if [ -n "$revs" ]; then
echo $branch needs update
git diff --summary --shortstat -M -C -C $rev master
fi
done
因此,如果您感覺(jué)很勇敢,則可以用“ git checkout $ branch && git rebase master”之類(lèi)的東西替換“ git diff”(如果已設(shè)置,則可能只是“ git pull --rebase”)。我認(rèn)為您隨后必須檢查是否存在“ .git / rebase-apply”目錄或檢查未合并文件的索引(“ git ls-files -u”),以測(cè)試是否已經(jīng)等待進(jìn)行合并。
當(dāng)然,如果沒(méi)有沖突,那很容易...它會(huì)產(chǎn)生一些在不容易的情況下也能起作用的東西:p
這并不一定解決如果您的分支之一基于其他事物時(shí)會(huì)發(fā)生的情況……這就是為什么我提到使用“ git pull --rebase”代替,因?yàn)檫@會(huì)根據(jù)分支配置進(jìn)行基礎(chǔ)化,而不是盲目地掌握。盡管檢測(cè)不是基于分支配置的,但是...可能最簡(jiǎn)單的方法是檢出每個(gè)分支并執(zhí)行“ git pull”并讓分支配置處理所有事情,包括是否重新設(shè)置基礎(chǔ)或合并?

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個(gè)贊
您總是可以像這樣編寫(xiě)一線shell:
for branch in topic1 topic2 topic3;do git rebase master $branch;done
由于您希望重新定位的主題分支可能會(huì)隨時(shí)間而變化,因此這是一種快捷的^ H ^ H ^ Hflexible解決方案:-)
- 3 回答
- 0 關(guān)注
- 721 瀏覽
添加回答
舉報(bào)