git checkout准确提交中的所有文件

val*_*ior 6 git git-checkout

据我所知,要获取某个文件的旧版本,我需要输入:

git checkout COMMIT-HASH -- file-name.ext
Run Code Online (Sandbox Code Playgroud)

但是,如果我不从某个提交中获取所有修改过的文件吗?我可以输入以下内容吗:

git checkout COMMIT-HASH -- *
Run Code Online (Sandbox Code Playgroud)

PS我知道我可以手动列出文件,但是如果有很多文件,这并不方便。

twa*_*erg 8

如果我正确理解您的要求,则可以认为以下两种方法之一可以胜任:

git reset --merge <commit>
Run Code Online (Sandbox Code Playgroud)

要么

git checkout <commit> -- .
Run Code Online (Sandbox Code Playgroud)

如果您的工作目录中当前有一些文件不在<commit>,则它们仍将存在,这可能会使事情感到困惑,具体取决于您要执行此操作的原因。一种仅获得其内容的干净工作树的替代方法是<commit>

rm -r *
git archive --format=tar <commit> | tar xf -
Run Code Online (Sandbox Code Playgroud)

为此,您也可以在上述git resetor git checkout命令之前清空工作树。

这些都不会使您真正地动起来HEAD,我认为这是您想要实现的效果...

  • 我相信OP的问题可以通过“git checkout &lt;commit&gt; -- .”解决。他似乎并不打算移动当前分支,因此 `git reset --merge &lt;commit&gt;` 将无济于事。 (2认同)

SLa*_*aks -4

只是根本不传递文件名。

git checkout COMMIT-HASH 
Run Code Online (Sandbox Code Playgroud)

  • 该命令将 HEAD 移动到该 COMMIT-HASH。我需要类似 git revert &amp;&amp; git reset --mixed HEAD~1 的东西,但没有解决任何冲突。仅来自该提交的处于该状态的所有文件和机会观察当前和这些状态的差异。 (4认同)