将本地仓库的所有分支重置为与远程相同

时间:2016-03-15 18:34:15

标签: git github branch bfg-repo-cleaner

首先这是不同的,因为这是针对所有分支而不是一个分支。 (我发现的所有内容一次只为一个分支指定了这个)

我在一个拥有大约20-30个分支的回购工作(我知道我知道长故事的不良做法)

无论如何我使用git bfg清理器删除了一些旧提交,使用它之后你需要删除并重新放入代码或重置每个分支。

我知道如何使用

设置分支
git fetch origin
git reset --hard origin/master

但有没有办法用一个命令重置每个分支,或者我一次只能做一个分支?

我忽略了很多本地文件,我不想处理复制和重写。 (如IDE文件,计算机配置文件等...)

5 个答案:

答案 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

此工具的优点:

  1. 在一个存储库中支持多个遥控器。
  2. 支持为本地和跟踪分支使用不同的名称。
  3. 没有容易出错的正则表达式解析/编辑。

答案 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
相关问题