当我在分支上工作并且想要完全删除所有未进行的更改时,我倾向于先使用git stash drop
然后使用git reset HEAD
。假设我没有任何阶段性的更改,那么它和$Word = New-Object -ComObject Word.Application
$Document = $Word.Documents.Add()
$Selection = $Word.Selection
$Selection.TypeText("Testing")
#SET PRINT LAYOUT OPTIONS HERE, WHICH I DON'T KNOW HOW :)
$File = 'C:\temp\test.docx'
$Document.SaveAs([ref]$File,[ref]$SaveFormat::wdFormatDocument)
$word.Quit()
之间是否有功能上的区别?
答案 0 :(得分:2)
man git-stash
将本地修改保存到新存储中,然后运行git reset --hard还原它们。
没有什么区别,因为它完全一样。
答案 1 :(得分:2)
简单回答您的问题。
git stash
删除所有跟踪的文件,这些文件只能使用git stash pop
还原为最近的存储。如果您认为自己已多次执行git stash,请使用git stash list
对于git stash drop
的问题,这里Difference between git stash pop and git stash apply
如果您也想隐藏未跟踪的文件,则可以使用git stash --all
另一方面,git reset HEAD
是完全不同的操作。如果至少没有在本地计算机上执行git commit
,而是执行git reset
,则所有已暂存的文件将再次被取消暂存。意味着如果您执行git add file.test
并执行了git reset HEAD
,它将取消所有文件的暂存。指向本地计算机中的HEAD提交。因此,在使用此命令之前,请先考虑一下。
这不是一个危险的命令,但是您可以使用git reflog
来查看区别,这有助于了解HEAD指向您的本地和原点的位置。
答案 2 :(得分:2)
好吧...首先,git reset HEAD
实际上不会删除您未进行的更改。 git reset --hard HEAD
将(尽管它仍然不会删除未跟踪的文件)。重要的是,reset
的主要重点是更新索引-也就是说,您可以使用它来取消升级更改。
清除非阶段性更改的最直接步骤是
git checkout -- .
git clean -f
第一个命令从跟踪的文件中丢弃未暂存的更改,第二个命令从未跟踪的文件中删除(尽管您可能首先要执行git clean -n
,以确保您不会忘记文件;因为一旦删除了未跟踪的文件,git
无法做任何事情来帮助您恢复文件。
我会说使用stash
是一种技巧-它不能反映命令的预期语义-但通常可以使用。您甚至可以使用--keep-index
命令来避免意外丢弃已进行的更改。
实际差异很小。您正在让git做额外的工作来将对象存储在数据库中,然后告诉它忽略那些对象。如果经常执行,这可能会使数据库混乱,但是添加的对象最终将被gc
清除,因此在实践中,我不希望它引起真正的问题。