我在回来的时候用当地的回购做了一些可疑的事情,这导致我所有的当地分支机构都失去了他们的远程跟踪。我认为我已经正确设置了远程设备,因为我可以看到所有远程分支并且还可以添加跟踪。
当我在本地创建新分支时,它工作正常。
这是git branch -llv
:
$ git branch -lvv
Branch 1 d6c67c8 [origin/Branch 1] Commit message
Branch 2 17503c9 Commit message
Branch 3 4f987c4 Commit message
Branch 4 6e5670a [origin/Branch 4] Commit message
Branch 5 77bd14c Commit message
我的问题是,我可以使用一个命令在我的所有本地branch_x
和远程等效origin/branch_x
之间添加跟踪吗?因为我有很多分支,所以它似乎相当繁琐的一个接一个地做。在许多情况下,遥控器很可能领先于我当地的分支机构,但可能不是大多数情况。
我正在考虑做git push -u origin --all
这样的事情,但我不确定这是否是最佳方法。
答案 0 :(得分:1)
我唯一可以建议的是:
git branch --set-upstream-to origin/your_branch
将其设置为一个分支。
现在,你必须编写一个bash脚本,每个分支都会这样做:
git checkout $your_branch
git branch --set-upstream-to origin/$your_branch
另一件事:
branches=()
eval "$(git for-each-ref --shell --format='branches+=(%(refname))' refs/heads/)"
for branch in "${branches[@]}"; do
echo $branch
done
将为您打印所有分支的名称,以/ refs / heads为前缀 您可以在脚本中使用它。
实际上你的问题应该通过运行来解决:
branches=()
eval "$(git for-each-ref --shell --format='branches+=(%(refname))' refs/heads/)"
for branch in "${branches[@]}"; do
branch_name=`echo $branch | "sed s|refs/heads/||"`
git checkout $branch_name
git branch --set-upstream-to origin/$branch_name
done
答案 1 :(得分:0)
这是已接受答案的另一种形式,让git
去除路径并删除bash数组。另外,不要尝试跟踪master
分支(通常是隐式的)或HEAD
。用less
替换最后一行以预览命令。
git for-each-ref --shell --format='[[ %(refname) =~ /master$ ]] \
|| [[ %(refname) =~ /HEAD$ ]] \
|| git branch --track %(refname:lstrip=3) %(refname)' refs/remotes/origin |
while read line; do eval "${line}"; done