3 回答

TA貢獻1815條經驗 獲得超13個贊
我已經將其轉換為健壯的腳本,并保存在我的git-extensions存儲庫中:
$ 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貢獻1811條經驗 獲得超6個贊
我相當確定沒有辦法自動執行此操作。請記住,“ git rebase master”還可以將您帶回到需要您解決合并沖突的外殼程序中,因此,如果您要編寫腳本來自動化所有這些操作,則需要考慮到這一點。
但是,您可以相當輕松地跟蹤哪些分支需要更新。嗯,對于任何分支,如果分支不是最新的wrt(即僅在master之上提交),“ git rev-list branch..master”將產生輸出。因此,您需要遍歷除master以外的所有本地頭來生成報告(nb“ git show-branch”將大致執行此操作):
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
因此,如果您感覺很勇敢,則可以用“ git checkout $ branch && git rebase master”之類的東西替換“ git diff”(如果已設置,則可能只是“ git pull --rebase”)。我認為您隨后必須檢查是否存在“ .git / rebase-apply”目錄或檢查未合并文件的索引(“ git ls-files -u”),以測試是否已經等待進行合并。
當然,如果沒有沖突,那很容易...它會產生一些在不容易的情況下也能起作用的東西:p
這并不一定解決如果您的分支之一基于其他事物時會發生的情況……這就是為什么我提到使用“ git pull --rebase”代替,因為這會根據分支配置進行基礎化,而不是盲目地掌握。盡管檢測不是基于分支配置的,但是...可能最簡單的方法是檢出每個分支并執行“ git pull”并讓分支配置處理所有事情,包括是否重新設置基礎或合并?

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