Git:如何在不提取的情况下自动将本地分支与远程跟踪合并

Zeb*_*oka 5 git merge branch git-branch

想象一下,我有几个分支:master,a,b,c ......

现在我在主分支和"git pull".这将从远程服务器获取所有更改到origin/master,origin/a,origin/b ... branches并将CURRENT branch(master)与origin/master合并.但后来我想切换到A分支并再次从远程跟踪分支合并这些远程更改,而不再获取更改(因为它们已经在源/分支中).

是否有一些简单的方法来指定完全远程分支I跟踪(即自动)?

Cas*_*bel 1

我不相信有一个内置命令可以做到这一点。但是,你可以这样做:

#!/bin/bash
head=$(git symbolic-ref HEAD) || exit
head=${head#refs/heads/}
merge=$(git config --get branch.$head.merge) || { echo "no tracking branch"; exit 1; }
remote=$(git config --get branch.$head.remote) || remote=origin
git merge $remote/${merge#refs/heads/}

# alternatively, as in Aristotle's answer:
# head=$(git symbolic-ref HEAD) || exit
# upstream=$(git for-each-ref --format='%(upstream:short)' "$head"
# [ -z "$upstream" ] && { echo "no tracking branch"; exit 1; }
# git merge $upstream
Run Code Online (Sandbox Code Playgroud)

我认为我已经很好地涵盖了我的基础 - 如果处于分离的 HEAD 状态,或者当前分支没有跟踪分支,它会以失败状态退出。它默认为 origin,就像普通的 git 传输命令一样。(如果您尝试在跟踪远程分支以外的其他内容的分支上使用它,就会发生奇怪的事情,即不是 refs/heads/* 形式,但这似乎不太可能。) 看起来不是这样实际上可以节省你很多时间,但你就在这里!

如果你想使用它,只需将它存储在某个地方并为其添加别名,或者将其命名为 git-something 并将其放入你的 PATH 中。