如何对已在索引中暂存的文件暂存后续更改?
How to stage subsequent changes to a file that has already been staged in index?
我对文件进行了一些更改,然后将其暂存在索引中以供下一次提交。然后我意识到我需要做更多的改变。有没有办法在最终提交之前捕获这些后续更改,而不是取消暂存?
会不会
git add -u filename (与我对 filename 文件进行更改的次数一样多)
而不是
git重置
git 添加文件名
?
您可以对同一个文件多次调用 git add filename
。
它会始终添加任何现有的非暂存更改,无论文件是否已在索引中更改。
-u
标志(--update
的快捷方式)有不同的用途。来自 the man page:
Update the index just where it already has an entry matching <pathspec>
. This removes as well as modifies index entries to match the working tree, but adds no new files.
换句话说:如果 filename
以前从未被跟踪过,git add -u filename
将不会将其添加到索引中。但是对于已经被跟踪的文件,使用 -u
标志没有区别。
显示对已经暂存的文件进行后续更改的影响的示例,并且每次 运行 "git add"
回声"new file" > newfile.txt
git 添加 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 ......
回显 "adding a second line to my new file" >> newfile.txt
git 添加 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 [扫描悬空 blob]
检查对象目录:100% (256/256),完成。
检查对象:100% (462/462),完成。
dangling blob fa49b0779.... [发现之前的blob现在是悬空的!]
git fsck | grep 9f70c3077 ...... [扫描当前blob是否悬空]
检查对象目录:100% (256/256),完成。
检查对象:100% (462/462),完成。
[很明显,没找到!]
echo "this is the third line" >> newfile.txt [对 newfile.txt 进行更多更改]
git 添加 newfile.txt
git fsck | grep 9f70c3077..... [再次扫描9f70c3077......]
检查对象目录:100% (256/256),完成。
检查对象:100% (462/462),完成。
悬挂 blob 9f70c3077....
[这次,我们发现9f70c3077……不再是newfile.txt对应的blob了。它现在悬空,等待垃圾收集器将其清除!]
我对文件进行了一些更改,然后将其暂存在索引中以供下一次提交。然后我意识到我需要做更多的改变。有没有办法在最终提交之前捕获这些后续更改,而不是取消暂存?
会不会
git add -u filename (与我对 filename 文件进行更改的次数一样多)
而不是
git重置
git 添加文件名
?
您可以对同一个文件多次调用 git add filename
。
它会始终添加任何现有的非暂存更改,无论文件是否已在索引中更改。
-u
标志(--update
的快捷方式)有不同的用途。来自 the man page:
Update the index just where it already has an entry matching
<pathspec>
. This removes as well as modifies index entries to match the working tree, but adds no new files.
换句话说:如果 filename
以前从未被跟踪过,git add -u filename
将不会将其添加到索引中。但是对于已经被跟踪的文件,使用 -u
标志没有区别。
显示对已经暂存的文件进行后续更改的影响的示例,并且每次 运行 "git add"
回声"new file" > newfile.txt
git 添加 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 ......
回显 "adding a second line to my new file" >> newfile.txt
git 添加 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 [扫描悬空 blob]
检查对象目录:100% (256/256),完成。 检查对象:100% (462/462),完成。 dangling blob fa49b0779.... [发现之前的blob现在是悬空的!]
git fsck | grep 9f70c3077 ...... [扫描当前blob是否悬空]
检查对象目录:100% (256/256),完成。 检查对象:100% (462/462),完成。 [很明显,没找到!]
echo "this is the third line" >> newfile.txt [对 newfile.txt 进行更多更改]
git 添加 newfile.txt
git fsck | grep 9f70c3077..... [再次扫描9f70c3077......]
检查对象目录:100% (256/256),完成。 检查对象:100% (462/462),完成。 悬挂 blob 9f70c3077....
[这次,我们发现9f70c3077……不再是newfile.txt对应的blob了。它现在悬空,等待垃圾收集器将其清除!]