想象一下,我有几个分支:师父,A,B,C…
现在我是在主分行和“吉特拉”。这会将所有更改从远程服务器获取到origin/master、origin/a、origin/b…将当前分支(主分支)与源/主分支进行分支和合并。但是,我想切换到一个分支,然后再次从远程跟踪的分支合并这些远程更改,而不再提取更改(因为它们已经在origin/a分支中)。
有没有更简单的方法来做到这一点,不指定确切的远程分支我跟踪(即自动)?
最佳答案
我不相信有一个内置的命令。但是,您可以这样做:
#!/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
我想我已经很好地覆盖了我的基础——如果在分离的头状态,或者如果当前分支没有跟踪分支,它将以失败状态退出。它默认为to origin,就像正常的git传输命令一样。(如果您尝试在跟踪远程分支以外的分支的分支上使用它,可能会发生一些奇怪的事情,即不是refs/heads/*,但这似乎不太可能。)看起来它实际上不会为您节省很多时间,但您已经找到了!
如果你想使用它,就把它存储在某个地方,并给它起个别名,或者命名为git某物,然后放到你的路径上。