Git:能够在不触及工作树的情况下暂存某个文件内容

时间:2011-12-20 18:37:29

标签: git stage

我想修改一个(文本)文件的索引,而不必更改工作树文件状态。这可能吗?

3 个答案:

答案 0 :(得分:1)

是的,你可以在任何git级别上使用--work-tree选项(这实际上不是真的。它应该适用于任何边缘情况除外)命令:

git show HEAD:path/to/your/file.txt > /some/other/place/file.txt
# modify the file in /some/other/place/file.txt
git --work-tree=/some/other/place add /some/other/place/file.txt

答案 1 :(得分:1)

是的,您可以使用git update-index在特定路径上明确地暂存blob。

git update-index --cacheinfo 100644 <sha1-of-blob> path/in/repo

如果路径是分支新文件,您还需要使用--add

如果要放置的文件是git存储库中尚不存在的blob,则可以使用git hash-object将新blob存储在git存储库中,例如:

blobid=$(command_that_creates_output | git hash-object -w --stdin)

blobid=$(git hash-object -w /path/not/necessarily/in/repository)

然后您可以按上述方式暂存blob。

git update-index --cacheinfo 100644 blobid path/in/repo

答案 2 :(得分:1)

“在不改变工作目录的情况下更改索引中的文件”的另一种方法是仅将索引应用于索引。这通常是GUI git客户端只放置给定文件中选定行的方式。

您可以从(如果需要)开始清除该文件的索引更改:

git reset path/to/file

然后为其提取完整的补丁

git diff path/to/file > /path/to/tmpfile

编辑补丁文件以仅包含您要应用的更改,并仅应用已编辑的补丁:

git apply --cached /path/to/tmpfile

请参阅:

git help apply