为什么git提交未暂存到索引的文件块?

时间:2020-01-03 23:43:48

标签: git

我不想将单个文件myfile中的所有更改暂存到索引。相反,我想在myfile中选择大块的更改以暂存到索引。

git add --patch似乎是我需要的命令和选项。请在下面查看我尝试使用的命令/选项。

100 % git status -s
 M myfile

101 % git add --patch myfile

102 % git status -s
MM myfile

到目前为止一切顺利。

Command 100输出带有前导空格的M,表示myfile的所有块都是未分级的。

Command 101允许我使用y选项来选择我要演出的帅哥,并使用n选项不演出。

Command 102M之前以前导空格输出另外的M。我以为这表示我已暂存到Command 101中的索引的那组块,其余的块均未暂存到该索引。

然后,我提交并感到惊讶,git似乎提交了所有的请求,而不仅仅是我选择的请求。请参阅下面的命令。

103 % git commit

104 % git status -s
Nothing to stage

执行line 104之后的上述输出使我感到惊讶。我希望执行line 104之后的输出如下。

104 % git status -s
 M myfile

为什么git会提交文件中的所有更改,而不仅仅是提交给索引的杂项?

1 个答案:

答案 0 :(得分:2)

two comments中所述,这种情况下的问题是错误的钩子。此特定存储库的预提交钩子不适当地运行git add

一般来说,编写一个好的预提交钩子很难,除非该钩子检查该提交。即使这样,检查代码也应谨慎使用索引(登台区域)中的内容,而不是工作树中的内容。

相关问题