我有三個分支first,second和master:
D---E---F first
/
A---B---...---C---... master
\
G---H second
first是最終版本,正在等待合并master為單個壓縮提交。second仍在開發中。
我想定期檢查在新second提交first出現在second.
我有兩個存盤庫:
- 在
repo1我簡單地添加新的提交I和J到second并將它們推送到origin. - 在
repo2我的作業分支是second,它已重新定位到first. 我永遠不會推動它,repo2只需要用于本地構建檢查。
repo1
D---E---F first
/
A---B---...---C---... master
\
G---H---I---J second, origin/second
repo2
$ git checkout second
$ git rebase first
D---E---F first
/
A---B---...---C---... master
\
D'--E'--F'--B'--...---C'--G---H second
重要的是 commit E( E') 導致整個專案的長時間重建,所以我希望它永遠不會再次重新應用并留在原處。
這就是為什么我不能使用:
git pull -r
onsecond因為它會重新安排所有提交并導致這個
repo2
A---B---...---C---G---H---I---J---D'--E'--F' second
另外,我不能使用快進拉,因為second在repo2和origin/second發散。但我的猜測是,像快進拉動這樣的東西確實是可能的。它應該導致以下結果:
repo2
D---E---F first
/
A---B---...---C---... master
\
D'--E'--F'--B'--...---C'--G---H---I---J second
我可以用一些 Git 命令序列以某種方式模仿它嗎?
uj5u.com熱心網友回復:
從你的repo2:你可以檢查狀態origin1/second,然后運行git fetch,檢查新狀態并嘗試挑選增量:
before=$(git rev-parse orgin1/second)
git fetch origin1
after=$(git rev-parse orgin1/second)
if [ "$before" != "$after" ]; then
git checkout second
git cherry-pick ${before}..${after}
fi
如果您需要它不僅適用于硬編碼second分支,而且適用于您可能擁有的任何活動分支:
branch=$(git branch --show-current)
before=$(git rev-parse origin1/$branch)
git fetch
...
或者如果你想將分支作為引數傳遞給 fetch :
branch=$1
if [ -z "$branch" ]; then
branch=$(git branch --show-current)
fi
或者 ...
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/536314.html
標籤:混帐变基拉快进
