git 为所有分支设置了一个遥控器,无需推送



是否有任何 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 对因果关系不是很聪明,所以它认为如果上游设置为不存在的分支,则因果序列必须是:

  1. 上游存在
  2. 分支的上游设置为现有上游
  3. 删除上游,导致分支的上游设置不当

事实上,实际原因是您故意不恰当地设置上游,期望将来设置变得合适。 因此,请忽略"消失"注释。