3 回答
TA貢獻1785條經驗 獲得超8個贊
我知道這個問題已經快3年了,但我問自己同樣的問題并沒有找到任何現成的解決方案。所以,我自己創建了一個自定義git命令shell腳本。
在這里,git-ffwd-update腳本執行以下操作...
它發出一個
git remote update來獲取lates revs然后用于
git remote show獲取跟蹤遠程分支的本地分支列表(例如可以使用的分支git pull)然后它檢查
git rev-list --count <REMOTE_BRANCH>..<LOCAL_BRANCH>遙控器后面的本地分支提交的數量(反之亦然)如果本地分支提前1或更多提交,則不能快速轉發,需要手動合并或重新綁定
如果本地分支提前0提交,后面提交1個或多個提交,則可以快速轉發
git branch -f <LOCAL_BRANCH> -t <REMOTE_BRANCH>
該腳本可以像:
$ git ffwd-updateFetching origin branch bigcouch was 10 commit(s) behind of origin/bigcouch. resetting local branch to remote branch develop was 3 commit(s) behind of origin/develop. resetting local branch to remote branch master is 6 commit(s) behind and 1 commit(s) ahead of origin/master. could not be fast-forwarded
完整的腳本應該保存為git-ffwd-update并且需要在PATH。
#!/bin/bashmain() {
REMOTES="$@";
if [ -z "$REMOTES" ]; then
REMOTES=$(git remote);
fi
REMOTES=$(echo "$REMOTES" | xargs -n1 echo)
CLB=$(git rev-parse --abbrev-ref HEAD);
echo "$REMOTES" | while read REMOTE; do
git remote update $REMOTE
git remote show $REMOTE -n \ | awk '/merges with remote/{print $5" "$1}' \ | while read RB LB; do
ARB="refs/remotes/$REMOTE/$RB";
ALB="refs/heads/$LB";
NBEHIND=$(( $(git rev-list --count $ALB..$ARB 2>/dev/null) +0));
NAHEAD=$(( $(git rev-list --count $ARB..$ALB 2>/dev/null) +0));
if [ "$NBEHIND" -gt 0 ]; then
if [ "$NAHEAD" -gt 0 ]; then
echo " branch $LB is $NBEHIND commit(s) behind and $NAHEAD commit(s) ahead of $REMOTE/$RB. could not be fast-forwarded";
elif [ "$LB" = "$CLB" ]; then
echo " branch $LB was $NBEHIND commit(s) behind of $REMOTE/$RB. fast-forward merge";
git merge -q $ARB;
else
echo " branch $LB was $NBEHIND commit(s) behind of $REMOTE/$RB. resetting local branch to remote";
git branch -f $LB -t $ARB >/dev/null;
fi
fi
done
done}main $@TA貢獻1813條經驗 獲得超2個贊
您描述的行為pull --all完全符合預期,但不一定有用。該選項被傳遞給git fetch,然后從所有遙控器獲取所有引用,而不僅僅是所需的引用; pull然后合并(或在你的情況下,rebase)適當的單個分支。
如果你想查看其他分支機構,你將不得不檢查它們。是的,合并(和重新定位)絕對需要一個工作樹,所以如果不檢查其他分支就無法完成。如果你愿意的話,你可以把你描述的步驟包裝成一個腳本/別名,雖然我建議加入這些命令,&&這樣如果其中一個失敗了,它就不會嘗試使用。
- 3 回答
- 0 關注
- 5245 瀏覽
添加回答
舉報
