如何使用repo丢弃更改

Joh*_*nny 44 reset repo

repo status 向我展示了许多不想要的变化.

如果我输入每个项目并使用,它将会重复git reset --hard.

有没有办法使用repo重置所有更改,类似的repo reset --hard

std*_*all 97

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

repo forall -vc "git reset --hard"
Run Code Online (Sandbox Code Playgroud)

什么意思在这里?

repo forall会执行所有回购.

- v是详细的,因此它将打印命令的输出

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


pmo*_*mod 21

如果需要将工作文件夹恢复到没有本地修改且没有未跟踪文件的清理状态(即repo状态不显示),我发现这两种方法对于repo sync和删除/修改的文件很有用

repo forall -c 'git reset --hard ; git clean -fdx' 
Run Code Online (Sandbox Code Playgroud)

要么

rm -rf * ; repo sync -l
// note that .repo is preserved after that
Run Code Online (Sandbox Code Playgroud)

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

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


Sha*_*ara 11

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

repo sync -d
Run Code Online (Sandbox Code Playgroud)

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

编辑:

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

工作命令是:

repo forall -vc "git reset --hard"
Run Code Online (Sandbox Code Playgroud)

命令和选项说明

  • 对所有人

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

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

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

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

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

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

  • `repo sync -d` 对我不起作用。`repo status` 仍然显示了我所有不需要的更改。 (4认同)

小智 9

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

repo forall -p -c 'git checkout -f foo'
Run Code Online (Sandbox Code Playgroud)

这里foo应该用合法的分支名称所取代.


h0t*_*1r3 5

#!/bin/bash
for gitdir in $(find . -name .git); do
    pushd $(dirname $gitdir)
    git reset --hard
    popd
done
Run Code Online (Sandbox Code Playgroud)