repo status
向我展示了很多不想要的变化。
如果我输入每个项目并使用git reset --hard
,那将会重复。
有没有办法使用repo重置所有更改,例如repo reset --hard
?
答案 0 :(得分:92)
这是我用于此类事情的命令,非常有用
repo forall -vc "git reset --hard"
这里的一切意味着什么?
repo forall
将执行所有回购。
- v
是详细的,因此它将打印命令的输出
-c "COMMAND TO EXECUTE"
是您想要的实际命令
答案 1 :(得分:20)
如果需要将工作文件夹还原到清除状态,而您没有本地修改且没有未跟踪的文件(即 repo status 没有显示任何内容) ,我发现这两种方法在repo sync and deleted/modified files
上很有用repo forall -c 'git reset --hard ; git clean -fdx'
或
rm -rf * ; repo sync -l
// note that .repo is preserved after that
请注意,这不等于初始化新的本地仓库和同步(例如保留存储)
如果您不确定发生了什么,请阅读完整主题repo sync and deleted/modified files
答案 2 :(得分:9)
我使用repo forall命令并使用以下语法,它可以帮助我重置跟踪文件。
repo forall -p -c 'git checkout -f foo'
其中foo
应替换为合法的分支名称。
答案 3 :(得分:4)
#!/bin/bash
for gitdir in $(find . -name .git); do
pushd $(dirname $gitdir)
git reset --hard
popd
done
答案 4 :(得分:-4)
您可以使用以下repo
命令恢复所有更改:
repo sync -d
这会将您的所有更改还原为原始版本。
<强>编辑:强>
上面的命令仅适用于当时的版本。
工作命令是:
repo forall -vc "git reset --hard"
命令和选项说明
在每个项目中执行给定的shell命令
选项(可与forall
命令一起使用)
-c
:要执行的命令和参数。该命令通过/ bin / sh进行评估,并将其作为shell传递后的任何参数 位置参数。
-p
:在输出指定命令之前显示项目标题。这是通过将管道绑定到命令的stdin,stdout和 Sterr溪流,并将所有输出管道输送到连续流中 显示在单个寻呼机会话中。
-v
:显示命令写入stderr的消息。
有关详细信息,请参阅repo document