将每个文件重置为HEAD,但stage git中的文件除外

将每个文件重置为HEAD,但stage git中的文件除外,git,reset,head,stage,Git,Reset,Head,Stage,假设foo.c已暂存,bar.c已修改但未暂存。是否有一种方法可以获取每个非暂存文件(在本例中为bar.c),并在不退出暂存的情况下将其重置回HEAD 我知道提交不会书写酒吧历史上的变化,我只是想避免提交,因为我正在构建一个脚本 是的,您可以git签出项目文件夹中的每个文件。这不会影响任何暂存文件 git结帐 ,你已经接受了,它通常是正确的,符合你的意愿。不过,值得注意的是一些细节 请记住,就git状态而言,每个文件都有三个活动副本: foo.c存在于HEAD(HEAD:foo.c)、索引/暂

假设
foo.c
已暂存,
bar.c
已修改但未暂存。是否有一种方法可以获取每个非暂存文件(在本例中为
bar.c
),并在不退出暂存的情况下将其重置回HEAD


我知道提交不会书写酒吧历史上的变化,我只是想避免提交,因为我正在构建一个脚本

是的,您可以git签出项目文件夹中的每个文件。这不会影响任何暂存文件

git结帐

,你已经接受了,它通常是正确的,符合你的意愿。不过,值得注意的是一些细节

请记住,就git状态而言,每个文件都有三个活动副本:

  • foo.c
    存在于HEAD(
    HEAD:foo.c
    )、索引/暂存区域(
    :0:foo.c
    )和工作树(
    foo.c
    )中
  • bar.c
    存在于HEAD(
    HEAD:bar.c
    )、索引/暂存区域(
    :0:bar.c
    )和工作树(
    bar.c
    )中
当你说:

假设
foo.c
已暂存,
bar.c
已修改但未暂存

用Git术语来说,您的意思是:

  • 标题:foo.c
    !=<代码>:0:foo.c,但
    :0:foo.c
    =
    foo.c
  • 标题:bar.c
    =
    :0:bar.c
    ,但是
    :0:bar.c
    !=<代码>条形图c
请注意,任何一个文件的所有三个副本都可能彼此不同,例如,您可以使用
git add-p
获得这一点。如果您运行了
git add-p bar.c
,并选择了一些(但不是全部)补丁,那么您最终将处于这种状态

当您运行
git status
时,git first diff
HEAD
-vs index,并在提交时报告任何不同的更改。然后,它将索引与工作树区分开来,并报告任何不同之处,因为更改不是为了提交而进行的(并且可能还报告未跟踪的文件)


运行:

git checkout <path>
告诉Git将文件的
版本复制到索引中。这样就只剩下工作树了。您可以自己计算出这对
:0:foo.c
:0:bar.c
的影响

git reset <path>