Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 如何将工作目录中的文件内容与此文件先前暂存版本的内容交换?_Git_Git Index - Fatal编程技术网

Git 如何将工作目录中的文件内容与此文件先前暂存版本的内容交换?

Git 如何将工作目录中的文件内容与此文件先前暂存版本的内容交换?,git,git-index,Git,Git Index,是否可以将某个文件的索引状态与其工作树内容进行交换?您可以使用git show对象名从索引中获取内容,其中对象名为SHA1或:filename(表示来自索引的版本)或revision:filename(即给定版本的版本)。因此: git show :filename > filename.tmp git add filename mv filename.tmp filename 或 前者在修改索引之前将数据保存到磁盘,而后者只需向索引询问它拥有的对象名称,对其进行更改,然后从对象存储中获

是否可以将某个文件的索引状态与其工作树内容进行交换?

您可以使用
git show
对象名从索引中获取内容,其中对象名为SHA1或
:filename
(表示来自索引的版本)或
revision:filename
(即给定版本的版本)。因此:

git show :filename > filename.tmp
git add filename
mv filename.tmp filename


前者在修改索引之前将数据保存到磁盘,而后者只需向索引询问它拥有的对象名称,对其进行更改,然后从对象存储中获取对象。此时,不再有任何内容引用该对象,但在运行
git gc

之前不会删除该对象。您的意思是将文件的内容添加到索引?在这种情况下,
git add
就是这样做的。否则,我不知道您要做什么mean@rlc:我能理解“交换”作为exchange。将版本从工作树放到索引中,同时将版本从索引放到工作树中。@rlc,@Jan:如果您在组装提交时做了一些最后的更改,特别是如果提交没有提交您可能说的所有工作树更改,则很容易产生交换需求哎呀,我转移的版本与提交的另一半更改一起进行,工作树中的版本应该转移
OBJECT=$(git rev-parse :filename)
git add filename
git show $OBJECT > filename