如何对已经在索引中暂存的文件进行后续更改?

时间:2017-03-16 01:47:47

标签: git git-reset git-index

我对文件进行了一些更改,然后在下一次提交的索引中将其暂存。然后我意识到我需要做一些更改。有没有一种方法可以在最终提交之前捕获这些后续更改?

是不是

git add -u filename (与我对文件名文件进行更改的次数相同)

而不是

git reset

git add filename

2 个答案:

答案 0 :(得分:2)

您可以根据需要多次在同一个文件上调用git add filename

它始终会添加任何现有的非分阶段更改,无论该文件是否已在索引中发生更改。

-u标志(--update的快捷方式)有不同的用途。来自the man page

  

更新索引,使其具有匹配<pathspec>的条目。这将删除并修改索引条目以匹配工作树,但不添加新文件。

换句话说:如果以前从未跟踪filenamegit add -u filename不会将其添加到索引中。但对于已经跟踪的文件,使用-u标志没有区别。

答案 1 :(得分:0)

示例显示对已经暂存的文件进行后续更改并在每次运行“git add”时的影响

echo“new file”&gt; newfile.txt

git add newfile.txt

git ls-files --stage [注意对应newfile.txt的对象]

100644 fa49b077972391ad58037050f2a75f74e3671e92 0 newfile.txt

ls -Fls .git / objects / fa [查看fa文件夹]

1 -r - r - r-- 1 user1234 1049089 24 Mar 19 00:17 49b0779 .......

echo“在我的新文件中添加第二行”&gt;&gt; newfile.txt

git add newfile.txt

git ls-files --stage [注意与newfile.txt对应的新对象]

100644 9f70c3077ccb16453d0ad0c152e8c169f81d8466 0 newfile.txt

ls -Fls .git / objects / 9f [查看9f文件夹]

1 -r - r - r-- 1 user1234 1049089 54 Mar 19 00:22 70c3077 ......

git fsck | grep fa49b0779 [扫描悬空斑点]

检查对象目录:100%(256/256),完成。 检查对象:100%(462/462),完成。 悬空blob fa49b0779 .... [发现之前的blob现在悬空!]

git fsck | grep 9f70c3077 ...... [扫描看当前blob是否悬空]

检查对象目录:100%(256/256),完成。 检查对象:100%(462/462),完成。                                 [显然,没找到!]

回声“这是第三行”&gt;&gt; newfile.txt [对newfile.txt进行更多更改]

git add newfile.txt

git fsck | grep 9f70c3077 ..... [再次扫描9f70c3077 ......]

检查对象目录:100%(256/256),完成。 检查对象:100%(462/462),完成。 悬空blob 9f70c3077 ....

[这次,我们发现9f70c3077 ......不再是对应newfile.txt的blob。它正在晃来晃去,等待垃圾收集器把它擦掉!]