git reset [<mode>] [<commit>]
This form resets the current branch head to <commit> and possibly updates the index (resetting it to the
tree of <commit>) and the working tree depending on <mode>. If <mode> is omitted, defaults to --mixed.
The <mode> must be one of the following:
--soft
Does not touch the index file or the working tree at all (but resets the head to <commit>, just like
all modes do). This leaves all your changed files "Changes to be committed", as git status would put
it.
4条答案
按热度按时间rta7y2nd1#
Git警告你forms/answers.php在你的工作副本或索引中有未提交的更改。
您可以使用**git-stash保存更改,然后git-stash apply**恢复它们。
git-stash的常见用例是,您正在处理更改,但随后必须临时 checkout 不同的分支以修复bug。所以你可以将你的修改隐藏在你的索引和工作副本中, checkout 其他分支,修复bug,提交, checkout 原始分支,然后git-stash apply来恢复你的修改并从你离开的地方恢复。
yshpjwxd2#
Git在切换分支时会对 * 未提交的更改 * 进行双向合并(使用
git checkout <branch>
),但通常它只做简单的(树级)合并。除了Karl Voigtland的
git-stash
解决方案之外,您还可以为git checkout给予其他选项,选择以下选项之一:-m
/--merge
option.使用此选项,将完成当前分支、工作树内容和新分支之间的三方合并,您将位于新分支上。-f
选项丢弃本地更改。警告:未提交的更改将丢失!weylhg0b3#
您可以执行
git reset --soft
,使HEAD
指向新分支,但保留所有文件(包括在新分支中更改的文件)。然后,您可以使用git checkout
从新分支中检出真正需要的文件。mtb9vblg4#
Jakub也提到了
git checkout --merge
,但是在写这篇文章的时候,**我不推荐这个选项。**在我的例子中,它失败了,出现了一个“error:脏指数:不能合并”,并销毁了我的整个工作副本,没有备份它在任何藏匿或类似的东西。不要使用它,而是使用传统的藏匿。