是否有任何 git 命令可以为本地存储库中的分支(完全适用于所有人(设置远程存储库,而无需将本地提交推送到远程存储库?
简而言之,我想得到的所有东西都可以通过使用标志--all
来完成:
git push --all
还可以选择设置上游-u
:
git push --all -u
但我不想推动任何提交。
所需的结果只是为git push
设置本地和远程存储库之间的链接,因此,如果您将来git push
,则无需指定远程,也可以跳过--all
选项。
对于一个分支,请参阅问题 phd 链接到,即让现有的 Git 分支跟踪远程分支?
若要对某些分支集执行此操作,请使用循环。 要对所有分支执行此操作,请使用git for-each-ref
遍历所有分支,如以下 sh/bash 循环结构所示:
git for-each-ref --format='%(refname:short)' |
while read name; do
git branch --set-upstream-to=origin/$name $name
done
(这都是一行,真的,只是在这里分成更易读的行(。
这假定您希望origin/name
每个name
的上游名称。 如果没有,请适当替换。请注意,这将覆盖每个此类名称的任何现有上游集,或者如果尚不存在具有该名称的上游,则会失败。
如果origin/xyzzy
尚不存在,则无法将分支xyzzy
设置为将origin/xyzzy
作为其上游。 这是完全合乎逻辑的。 但是,它可能不是您想要的。
您可以通过低于git branch
级别来覆盖 Git 对此的智能,将git branch --set-upstream-to
替换为原始git config
操作:
git for-each-ref --format='%(refname:short)' |
while read name; do
git config branch.$name.remote origin
git config branch.$name.merge refs/heads/$name
done
这假定您的remote.origin.fetch
设置为+refs/heads/*:refs/remotes/origin/*
。 如果不是,您应该已经知道自己在做什么以及如何修改上述循环。
请注意,将上游设置为不存在的远程跟踪名称将使 Git 认为该名称曾经存在并且现在已经消失:git branch -vv
会将上游报告为"消失"。 Git 对因果关系不是很聪明,所以它认为如果上游设置为不存在的分支,则因果序列必须是:
- 上游存在
- 分支的上游设置为现有上游
- 删除上游,导致分支的上游设置不当
事实上,实际原因是您故意不恰当地设置上游,期望将来设置变得合适。 因此,请忽略"消失"注释。