【发布时间】:2011-06-28 02:00:39
【问题描述】:
repo status 向我展示了许多不需要的更改。
如果我进入每个项目并使用git reset --hard,它将被重复。
有没有办法使用 repo 重置所有更改,例如 repo reset --hard?
【问题讨论】:
repo status 向我展示了许多不需要的更改。
如果我进入每个项目并使用git reset --hard,它将被重复。
有没有办法使用 repo 重置所有更改,例如 repo reset --hard?
【问题讨论】:
您可以使用repo 命令来恢复您的所有更改:
repo sync -d
这会将您的所有更改恢复为原始版本。
已编辑:
上面的命令只适用于当时的版本。
工作命令是:
repo forall -vc "git reset --hard"
命令和选项说明
在每个项目中执行给定的shell命令
选项(可与forall 命令一起使用)
-c:要执行的命令和参数。该命令通过 /bin/sh 进行评估,之后的任何参数作为 shell 传递 位置参数。
-p:在指定命令的输出之前显示项目标题。这是通过将管道绑定到命令的标准输入、标准输出和 sterr 流,并将所有输出通过管道传输到一个连续的流中,即 显示在单个寻呼机会话中。
-v:显示命令写入标准错误的消息。
更多信息请参考repo document
【讨论】:
repo sync -d 对我不起作用。 repo status 仍然显示了我所有不需要的更改。
#!/bin/bash
for gitdir in $(find . -name .git); do
pushd $(dirname $gitdir)
git reset --hard
popd
done
【讨论】:
repo forall 并没有涵盖所有的 git 树。这种方法效果很好。
repo forall 似乎并没有修复每个 git repo。
我使用具有以下语法的 repo forall 命令,它可以帮助我重置跟踪文件。
repo forall -p -c 'git checkout -f foo'
foo 应替换为合法的分支名称。
【讨论】:
这是我用来做这类事情的命令,非常有用
repo forall -vc "git reset --hard"
这里的一切是什么意思?
repo forall 将为所有 repos 执行。
-v 很冗长,所以它会打印命令的输出
-c "COMMAND TO EXECUTE" 是您想要的实际命令
【讨论】:
&>/dev/null 来抑制输出。
-v。
如果需要将工作文件夹恢复到没有本地修改且没有未跟踪文件的干净状态(即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 和同步(例如,存储被保留)
如果您不确定发生了什么,请阅读完整主题repo sync and deleted/modified files
【讨论】: