[英]git push all branches from one remote to another remote iteratively
我有一個用例,我們正在為一個項目從一個遠程遷移到另一個。
legacy_remote :目前已經存在的現有遙控器。 new_remote :必須從舊遠程推送所有數據的新遠程。
我正在使用以下命令。
git remote set-url origin <legacy_remote>
git checkout master
git pull
git remote set-url origin <new_remote>
git push --force -u origin --all
git push origin --tags
我使用 force 關鍵字的原因是,每次我進行合並時,我不想解決新遠程中的沖突,而是替換新遠程中的內容,因為它目前尚未使用。
正在發生的問題是該命令:
git push --force -u origin --all
此命令僅將主控同步到主控,但不會將所有分支從遺留遠程移動到新遠程。 誰能告訴我命令中缺少什么。
不使用鏡像的原因是在新遠程上創建了幾個新分支,它們不想被覆蓋
然后嘗試
git push newremote --tags refs/remotes/origin/*:refs/heads/*
與git push --force -u origin --all
相比,不必先檢查分支,如此處所述。
除了VonC 的回答,您還可以:
git push newremote localname1:remotename1 localname2:remotename2 ...
根據需要用更多localname : remotename
對替換...
每個本地名稱可以是分支或遠程跟蹤名稱: refs/heads/ branch
或refs/remotes/origin/ name
,每個遠程名稱通常應該是您要在遠程上創建或更新的分支名稱。 將其完整拼寫出來,例如refs/heads/somebranch
,通常是個好主意; 當且僅當 Git 不會為您執行此操作時,它才是真正需要的,但很難提前知道Git 何時會為您執行此操作,因此最好只提前 go 並執行此操作。
您可以根據需要使用或不使用--force
。
在 shell 腳本中,您可以構建要推送的名稱集:
names=
# use some local branch names
for b in br1 br2 br3; do
names="$names refs/heads/$b:refs/heads/$b"
done
# and some remote-tracking names
for r in br3 br4 br5; do
names="$names refs/remotes/origin/$r:refs/heads/$r"
done
# show what we would run
echo git push --force origin $names
運行腳本,進行調整直到獲得正確的名稱集,然后取出echo
顯並最后運行一次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.