54

repo status向我展示了许多不需要的更改。

如果我输入每个项目并使用git reset --hard.

有没有办法使用 repo 重置所有更改,比如repo reset --hard

4

5 回答 5

105

这是我用于这类事情的命令,非常有用

repo forall -vc "git reset --hard"

这里的一切是什么意思?

将对repo forall所有回购执行。

-v很冗长,所以它会打印命令的输出

-c "COMMAND TO EXECUTE"是你想要的实际命令

于 2013-08-07T07:08:17.947 回答
26

如果需要将工作文件夹恢复到没有本地修改且没有未跟踪文件的干净状态(即回购状态不显示任何内容),我发现这两种方法对回购同步和删除/修改的文件很有用

repo forall -c 'git reset --hard ; git clean -fdx' 

或者

rm -rf * ; repo sync -l
// note that .repo is preserved after that

请注意,这不等同于初始化一个新的本地 repo 和同步(例如,存储被保留)

如果您不确定发生了什么,请阅读完整的线程repo 同步和删除/修改的文件

于 2014-02-25T11:32:52.370 回答
11

您可以使用以下repo命令还原所有更改:

repo sync -d

这会将您的所有更改恢复为原始版本。

编辑:

上面的命令仅适用于当时的版本。

工作命令是:

repo forall -vc "git reset --hard"

命令和选项说明

  • 对全部

在每个项目中执行给定的 shell 命令

选项(可与forall命令一起使用)

-c:要执行的命令和参数。该命令通过 /bin/sh 进行评估,之后的任何参数作为 shell 位置参数传递。

-p:在指定命令的输出之前显示项目标题。这是通过将管道绑定到命令的 stdin、stdout 和 sterr 流,并将所有输出通过管道传输到显示在单个寻呼机会话中的连续流来实现的。

-v: 显示命令写入 stderr 的消息。

有关更多信息,请参阅repo 文档

于 2012-03-06T16:29:25.107 回答
9

我使用具有以下语法的 repo forall 命令,它可以帮助我重置跟踪文件。

repo forall -p -c 'git checkout -f foo'

wherefoo应替换为合法的分支名称。

于 2012-07-28T17:25:02.650 回答
5
#!/bin/bash
for gitdir in $(find . -name .git); do
    pushd $(dirname $gitdir)
    git reset --hard
    popd
done
于 2012-03-11T00:53:50.353 回答