gpt4 book ai didi

git - 将每个文件重置为 HEAD,阶段 git 中的文件除外

转载 作者:太空狗 更新时间:2023-10-29 14:42:37 26 4
gpt4 key购买 nike

假设 foo.c 已暂存,而 bar.c 已修改但未暂存。有没有办法让每个非暂存文件(在本例中为 bar.c)重置回 HEAD 而 foo.c 不退出暂存阶段?

我知道提交不会在历史记录中写入栏的更改我只是想避免提交,因为我正在构建脚本。

最佳答案

S. KUMAR's answer ,您已经接受的,对于您的意图通常是正确的。不过,有几个细节值得注意。

请记住,每个文件都有 三个 个事件副本,直到 git status。关注点:

  • foo.c存在于 HEAD ( HEAD:foo.c )、索引/临时区域 ( :0:foo.c ) 和工作树 ( foo.c ) 中。
  • bar.c存在于 HEAD ( HEAD:bar.c )、索引/临时区域 ( :0:bar.c ) 和工作树 ( bar.c ) 中。

当你说:

Let's say foo.c is staged and bar.c has been modified but is not staged ...

无论如何,用 Git 术语来说,您的意思是:

  • HEAD:foo.c != :0:foo.c ,但是 :0:foo.c == foo.c
  • HEAD:bar.c == :0:bar.c ,但是 :0:bar.c != bar.c

请注意,任何一个文件的所有三个副本都可能彼此不同,使用 git add -p 可以很正常地得到这一点。例如。如果你跑了 git add -p bar.c并选择了一些(但不是全部)patch hunks,你最终会得到这个状态。

当你运行 git status , Git 第一个差异 HEAD -vs-index 并报告任何不同之处,因为为提交准备的更改。然后它会比较 index-vs-work-tree 并将任何不同之处报告为未暂存提交的更改(并且可能还会报告未跟踪的文件)。


运行:

git checkout <path>

告诉 Git 将文件的 index(也称为临时区域)版本复制到 work-tree。也就是说,对于每个匹配 <path> 的文件, 复制 :0:<path><path> .

鉴于您上面的设置,这将覆盖 foo.c来自 :0:foo.c , 留下 foo.c不变。它还会覆盖 bar.c来自 :0:bar.c , 这改变了 bar.c回到 HEAD:bar.c 中的内容, 自 :0:bar.c匹配(并且仍然匹配)HEAD:bar.c .


还值得一提的是,运行:

git reset <path>

告诉 Git 复制 HEAD文件的版本到索引。这留下了工作树。你可以自己算出这对 :0:foo.c 有何影响和 :0:bar.c .

关于git - 将每个文件重置为 HEAD,阶段 git 中的文件除外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49181985/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com