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

dtr*_*ers 9 git branch github bfg-repo-cleaner

首先这是不同的,因为这适用于所有分支而不是一个。(我发现的所有那些一次只为一个分支指定这个)

我在一个大约有 20-30 个分支的 repo 上工作(我知道我知道长篇大论的坏习惯)

无论如何,我正在使用 git bfg 清洁器删除一些旧的提交,在使用它之后,您需要删除并重新克隆代码或重置每个分支。

我知道如何使用设置分支

git fetch origin
git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)

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

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

Cod*_*ard 6

首先这是不同的,因为这适用于所有分支而不是一个

您可以使用一个脚本来循环遍历您的分支,然后在每个分支上执行您想要的操作:

# 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
Run Code Online (Sandbox Code Playgroud)

有没有更好的简单的解决方案?

是的,只需再次克隆项目,您将拥有与源相同的内容。
这正是您每个分支手动执行的操作。


笔记:

您可以使用以下命令一次获取所有数据:

# Fetch all remotes, branches and remove deledted content
git fetch --all --prune
Run Code Online (Sandbox Code Playgroud)


G. *_*ies 5

为什么不删除所有本地分支,然后每当远程分支被重新签出时,您就会同步?

 # BE CAREFUL!!!
 # THIS COMMAND WIPES OUT ALL LOCAL BRANCHES
 ?git branch | xargs git branch -D
Run Code Online (Sandbox Code Playgroud)

xargs 针对 stdin 的每一行运行提供的命令,在本例中为“git branch -D”针对原始“git branch”命令的每一行。

“git branch -D”命令对于当前分支将失败,但其他所有分支都将被擦除。

或者,您可以使用运行“git branch -f”的“xargs”做一些事情来强制将每个本地分支设置为其远程副本,但我认为上面的“git branch -D”方法是最简单的,也是最简单的就后果而言,直接考虑潜在的危害。

  • 是的,我认为 OP 只想重置本地分支 (2认同)

sne*_*sgx 5

完全删除该目录,然后克隆存储库。

rm -R repodir
git clone https://github.com/repodir/repodir
Run Code Online (Sandbox Code Playgroud)

  • 对于那些没有本地忽略的需要保存的文件的人来说,这是一个很好的解决方案。但我希望它对其他人有帮助! (2认同)