将所有本地未跟踪的分支推送到同一个远程分支

4

我在电脑上有多个本地分支,没有远程分支。

我想将所有没有追踪远程的本地分支(我有多个远程,例如originupstream)推送到同一个远程的URL上(例如备份),以进行备份。

如何实现这一点?

可以使用直接的Git命令或Bash脚本来列出没有远程分支(我有多个远程名称),并对它们进行迭代,将它们推送到同一个远程。


嗯,对于每个分支,您需要输入git push <myremote> <mybranch>。例如,git push origin branch1。您能解释一下难点在哪里吗? - matt
1
@matt 我认为他们正在寻找一种可以推送“所有分支”的方法,即无需手动输入每个分支名称的方法。 - IMSoP
@matt 没错,我有很多未被跟踪的分支(例如用于调试或未完成的功能),我想为备份目的全部推送它们。 - Catree
你尝试过使用 git push --all -u 命令吗? - Ionuț G. Stan
如果这只是一个单次问题,我会通过使用grep过滤出带有远程的分支来解析git branch -v -v的输出,例如 git branch -v -v | grep -v '\[[a-z]*/' 对于我来说有效,因为我的远程匹配 [a-z]*。这不是一个好的脚本解决方案,但对于一次性的任务,这就是我的解决方法。 - joanis
显示剩余3条评论
1个回答

2

也许我的问题更适合于bash脚本。
需要结合列出所有没有远程分支的本地分支并对它们进行迭代。

#!/bin/bash
while IFS= read -r aBranch ; do {  
  echo "Push ${aBranch} to backup";  
  git push backup "${aBranch}"
};
done < <(git branch --format '%(refname:short) %(upstream:short)' | awk '{if (!$2) print $1;}');
unset aBranch ;

相当整洁。我不认为你在这里需要IFS,使用while read branch; do ... done < <(git branch --format '%(refname:short) %(upstream:short)'...)更简单。 - Eugene

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接