亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Git:如何一次重新設置許多分支(具有相同的基本提交)的基礎?

Git:如何一次重新設置許多分支(具有相同的基本提交)的基礎?

Git
慕娘9325324 2019-11-14 08:52:24
我的項目中有一個master分支,可用來從其他人那里獲取更改。由此,我通常會在幾個主題分支上工作。我的問題是:我是否有辦法將新更改引入我的主服務器,然后立即將所有主題分支重新建立基礎?這種情況:        D--E topic1       /A--B--C  master       \        F--G topic2我想用一個命令(H來自上游)完成此任務:               D'-E'主題1              /    A–B–C–H主              \               F'-G'主題2現在,我知道可以通過將topic1和topic2重新設置到master上來完成此操作,甚至可以編寫腳本來實現此目的。但是,如果我還有其他幾個分支,創建新分支并頻繁刪除其他分支,而我一直都收到上游更改怎么辦?手動執行此操作(多次重新設置基準)既累人又容易出錯。有更容易的方法嗎?謝謝!
查看完整描述

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]


查看完整回答
反對 回復 2019-11-14
?
楊魅力

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”并讓分支配置處理所有事情,包括是否重新設置基礎或合并?


查看完整回答
反對 回復 2019-11-14
?
慕桂英546537

TA貢獻1848條經驗 獲得超10個贊

您總是可以像這樣編寫一線shell:


for branch in topic1 topic2 topic3;do git rebase master $branch;done

由于您希望重新定位的主題分支可能會隨時間而變化,因此這是一種快捷的^ H ^ H ^ Hflexible解決方案:-)


查看完整回答
反對 回復 2019-11-14
  • 3 回答
  • 0 關注
  • 716 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號