首先这是不同的,因为这是针对所有分支而不是一个分支。 (我发现的所有内容一次只为一个分支指定了这个)
我在一个拥有大约20-30个分支的回购工作(我知道我知道长故事的不良做法)
无论如何我使用git bfg清理器删除了一些旧提交,使用它之后你需要删除并重新放入代码或重置每个分支。
我知道如何使用
设置分支git fetch origin
git reset --hard origin/master
但有没有办法用一个命令重置每个分支,或者我一次只能做一个分支?
我忽略了很多本地文件,我不想处理复制和重写。 (如IDE文件,计算机配置文件等...)
答案 0 :(得分:3)
为什么不删除所有本地分支,然后每当重新签出远程分支时,您都会被同步?
# BE CAREFUL!!!
# THIS COMMAND WIPES OUT ALL LOCAL BRANCHES
git branch | xargs git branch -D
xargs针对stdin的每一行运行提供的命令,在这种情况下" git branch -D"反对原始" git branch"的每一行。命令。
" git branch -D"命令将对当前分支失败,但每个其他分支都将被擦除。
或者你可以用" xargs"做饭。运行" git branch -f"强制设置每个本地分支到其远程副本,但我认为" git分支-D"上述方法是最简单的,也是最直接的后果,潜在的危害因素。
答案 1 :(得分:2)
首先这是不同的,因为这适用于所有分支而不是一个
您可以使用一个脚本,它将遍历您的分支,然后在每个分支上执行您想要的任务:
# Loop on all the desired branches
for ref in $(git branch -a)
do
# ... DO ANYTHING YOU NEED HERE
# You have the $ref which stores the branch name
# ex: remotes/origin/master
done
是的,再次克隆项目,您将拥有与您的来源相同的内容 这正是您为每个分支手动执行的操作。
<强> 注意:的强>
您可以使用以下命令一次获取所有数据:
# Fetch all remotes, branches and remove deledted content
git fetch --all --prune
答案 2 :(得分:1)
只需编写一个小工具即可。 https://github.com/changyuheng/git-hard-reset-all
此工具的优点:
答案 3 :(得分:0)
您可以使用以下oneliner(基于that other answer):
git branch --format='%(refname:short)' | xargs -i sh -c "git checkout {} && git reset --hard origin/{}"
--format='%(refname:short)'
从*
移除烦人的git branch
-i
允许使用{}
作为分支的占位符警告:我没有使用太多该命令,因此它可能并不完全安全,如果您想使其更安全,请参见that answer。
答案 4 :(得分:0)
完全删除目录,然后克隆存储库。
rm -R repodir
git clone https://github.com/repodir/repodir