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的区别