2015-10-13 54 views
-1

我要unstage文件,但不是打字:这个“git reset”命令是做什么的?

git reset file.sh 

我输入:

git reset file.sh head 

输出功率为:

Unstaged changes after reset: 
M  path/file1 
M  path/file2 
M  path/file2 
.... 
^C 

我从git的文档知道git的复位有三种形式

git reset [-q] [<tree-ish>] [--] <paths>... 
git reset (--patch | -p) [<tree-ish>] [--] [<paths>...] 
git reset [--soft | --mixed | --hard | --merge | --keep] [-q] [<commit>] 

但我的命令不符合三种形式中的任何一种。

我的问题是:这里发生了什么?为什么命令在我所有的存储库上运行?

编辑:其实,file.sh存在,但没有。如果我使用

git reset existing.file nonexisting.file 

它会改变指数existing.file,而忽略第二个文件,并显示不分阶段的文件的完整列表(正常,但导致了位恐慌)。

如果键入:

git reset nonexisting.file existing.file 

就会失败。 http://paste.ubuntu.com/12780596/

由于@sehe以指向正确的解决方案。

+0

输出表示它。它将变化(到指定路径)取消。 – sehe

+0

好的,但是我提供的参数呢?它是否忽略了“file.sh”和“head”部分? –

+0

的可能的复制[你能解释一下“混帐复位”做简单的英语?](http://stackoverflow.com/questions/2530060/can-you-explain-what-git-reset-does-in-plain-英文) – shafeen

回答

3

它只是忽略了head部分(假设这是不是一个文件)。

要强制git的解释参数作为路径(例如unstaging文件删除时),使用--

git reset HEAD -- some/path 
+0

那么“file.sh”参数呢?它也被忽略了?如果这是真的,git在“重置”后忽略了所有内容并开始取消整个工作副本? –

+0

我不知道。使用完整的步骤来重现,我会告诉你。 – sehe

+0

只需带一些更改过的文件,并运行“git reset file.sh head”。您会看到,不是报告无效的参数,或者尝试重置名为“file.sh”和“head”的两个文件,它将重置所有文件。 –