Git瓷器命令将单个文件恢复为其HEAD状态但保持其分阶段状态?

Posted

技术标签:

【中文标题】Git瓷器命令将单个文件恢复为其HEAD状态但保持其分阶段状态?【英文标题】:Git porcelain command to revert a single file to its HEAD state but keep its staged state? 【发布时间】:2013-04-26 11:49:43 【问题描述】:

是否有 git瓷器命令可以将暂存文件的工作目录状态恢复为其 HEAD 状态,同时保持文件的暂存状态?稍后我希望能够将工作目录状态恢复为文件的暂存状态。我最初的想法是使用git checkout HEAD -- targetfile,但它也重置了文件的暂存状态。我看到这对git stash 是可行的,但它会影响其他文件,而我想专注于单个文件并保持其他文件的状态不变,否则可能会导致合并冲突:

git add targetfile
git stash
... // modify tagetfile in seeking of different task solution, possibly modifying other files too
git checkout HEAD -- targetfile //drop the different solution attempt, keep other modified files if any
git stash apply --index // revert to the stashed staged solution, but produces merge conflict for other modified files

我发现了一个很好的article,最后有一个汇总表,它缺少这个问题中描述的场景。在我看来,这应该很容易实现,但我很惊讶暂存目录状态和工作目录状态如此紧密耦合 - 您可以在保留文件工作目录状态的同时重置文件的暂存状态,但我很难做到相反。

【问题讨论】:

【参考方案1】:

这不是很好,因为它不会正确获取文件的可执行状态,但你可以这样做:

git show HEAD:targetfile > targetfile

理想情况下,git checkout HEAD -- targetfile 需要一个 --working-tree-only 选项,但我不知道这样的事情。

【讨论】:

按照您的建议,diff 似乎搞砸了:Binary files a/mydir/index.html and b/mydir/index.html differ 这些是 html 文本文件,而不是二进制文件,git 没有逐行显示有什么区别。 原来是 PowerShell 控制台输出编码的问题。所以这在某种程度上取决于控制台,但它会在大多数情况下完成这项工作。 ***.com/questions/13675782/…

以上是关于Git瓷器命令将单个文件恢复为其HEAD状态但保持其分阶段状态?的主要内容,如果未能解决你的问题,请参考以下文章

git reset HEAD 与 git reset --hard HEAD的区别

bat 文件以发出 git pull 命令并使 git bash 窗口保持打开状态

git常用命令

1.9 git reset HEAD 管理暂存区中的文件

git reset

单个文件的硬重置