git checkout -f master与git reset的区别

3
我想要撤销当前分支(比如“master”)中所有未提交的更改。以下两个命令哪一个是最好的选择?为什么?
  1. git checkout -f master
  2. git reset --hard <last commitID>

请注意,上述内容中包含HTML标签,请勿删除或更改。

这些问题中的任何一个对您有帮助吗?https://dev59.com/rGgv5IYBdhLWcg3wPOVn https://dev59.com/SXE85IYBdhLWcg3w8IM4 - thSoft
你可能想要阅读这篇文章(http://git-scm.com/blog),以了解checkout和reset之间的区别。 - Thibault J
2个回答

3

它们都可以满足你的需求:丢弃所有未提交的更改,但是checkout命令被设计为在当前分支上放弃未提交的更改并切换到一个新的分支,例如:

git branch 
*master
#Do some changes 
git checkout -f new_feature #It switch to the other branch(new_feature), discarding all the current branch changes, in one single command.

使用git reset --hard命令可以达到相同的目的,但如果您还想切换分支,则需要执行一个额外的命令:

git branch 
*master
#Do some changes 
git reset --hard
git checkout new_feature

我认为,如果你仍然留在同一分支中,这两个命令是等效的...


1
git checkout -f master

它的功能非常简单:

如果您只是执行检出操作,则本地更改不会丢失。

如果您想要覆盖更改,则添加 -f 标志以确保所有文件都恢复到其“原始”状态。这还可以让您在分支之间切换。

如果您正在处理当前分支,则可以直接使用重置并保存需要切换分支的操作。

git reset --hard <last commitID>

重置有几个选项:软重置、混合重置和硬重置。每个选项都有不同的作用。

更多信息:

https://www.kernel.org/pub/software/scm/git/docs/git-reset.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接