如何使用git进行全新的检出?

6

如何将工作目录还原到新克隆并检出当前版本的状态?

对于Subversion,我会这样做:

$ svn status --no-ignore | awk '$1 == "?" { print $2 }' | xargs rm -r

并且对于Mercurial:

$ hg status --ignored --unknown | awk  ' ( $1 == "?" ) || ( $1 == "I") { print $2 }' | xargs rm -r

在同一行回答也可以。但类似于git checkout --clean -r b4a23的内容会更好。


3
顽皮的回答:“rm -rf *; git clone <whatever>” 的翻译是:删除所有文件并克隆一个名为“<whatever>”的git仓库。 - CanSpice
这是完美的答案。有人能想出更有效的等价物吗? - John Lawrence Aspden
4个回答

21

(准备放弃所有本地未提交的更改:)

git reset --hard
git clean -dfx .

如上所述,您可以使用git stash将本地未提交的更改临时保存到一个“伪分支”(即一个存储)中。


2
这不会删除任何作为GIT存储库的目录,如果您希望强制删除这些存储库,则需要指定-f两次(因此为-dffx)。我们使用的软件包管理器(Composer)偶尔会将软件包下载为存储库。 - Lewis
@Lewis 你是在指子模块吗? - sehe
并非总是,Composer不使用子模块。但是,如果没有打包版本并且源代码存储在git中,则会检出git存储库。 - Lewis

2
除了@sehe的答案之外,你可能希望创建一个别名使它更容易。
git config --global alias.pristine '!git reset --hard && git clean -dffx'

那么你可以直接调用git pristine命令。

0
你可以使用 git stash 命令将当前的修改保存起来,然后使用 git stash apply 命令恢复你的更改。

使用 git stash -u 来隐藏未被追踪的文件,使用 git stash -a 同时隐藏被忽略的文件。 - Radon Rosborough

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接