是否有任何git命令为本地存储库中的分支(完全适用于所有分支)设置一个远程存储库,而无需将提交形式提交给远程本地存储?
简而言之,所有我想得到的东西都可以通过使用标志--all
完成:
git push --all
还可以选择设置上游-u
:
git push --all -u
但是我不想推送任何提交。
理想的结果是为git push
设置本地和远程存储库之间的链接,因此,如果将来git push
不需要指定远程,也可以跳过{{1} }选项。
答案 0 :(得分:1)
对于一个分支,请参见问题phd linked-to,即Make an existing Git branch track a remote branch?
要对某些分支集执行此操作,请使用循环。要对所有分支执行此操作,请使用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
(实际上,这是全部一行,只是在这里分成了更多可读的行)。
这假设您希望每个 name
的上游名称为origin/name
。如果不是,请适当替换。 请注意,这将覆盖每个此类名称的任何现有上游集,否则将失败,如果尚不存在具有该名称的上游集。
如果origin/xyzzy
尚不存在,则不能将分支xyzzy
设置为origin/xyzzy
作为上游。这是完全合乎逻辑的。但是,可能不是您想要的。
您可以通过降低到git branch
的级别,用原始的git branch --set-upstream-to
代替git config
来超越Git的智慧:
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对于因果关系不是很聪明,因此认为如果上游设置为不存在的分支,则因果顺序必须是:
事实上,实际原因是您出于预期将来会变得合适而故意将上游设置为 。因此,请忽略“已消失”注释。