gpt4 book ai didi

git - git reset --hard 和 git checkout 之间的区别

转载 作者:太空狗 更新时间:2023-10-29 13:09:26 26 4
gpt4 key购买 nike

假设我想撤消之前提交引入的所有更改。

据我了解,git reset --hard <specified commit>将删除指定提交之前的所有提交,并撤消所有更改。
另一方面git checkout <specified commit>将更改我的目录以反射(reflect)指定的提交。

所以如果我 git resetgit checkout 之后它的结果是否与 git reset --hard 相同? ?

或者,如果我只是 git commitgit checkout 之后, 新创建的提交是否会覆盖现有的提交?

最佳答案

提交 是树,分支 是指向某些提交的指针,HEAD (别名:@)是指向某个分支或某个提交的指针(‘detached HEAD’)。

git checkout <commit>移动 HEAD 、索引和工作树到指定的提交,并保留索引和工作树中的任何本地更改 if possible ,否则操作中止。当你这样做时,HEAD变得分离。您将看到这条消息,这是不言自明的:

You are in 'detached HEAD' state. You can look around, makeexperimental changes and commit them, and you can discard any commitsyou make in this state without impacting any branches by performinganother checkout.

If you want to create a new branch to retain commits you create, youmay do so (now or later) by using -b with the checkout command again.Example:

git checkout -b new_branch_name

因此您不会丢失工作树和索引中的任何更改,并且您不会丢失任何提交。*这是一个安全的操作。 p>

git reset --hard <commit>移动 HEAD 指向的分支HEAD如果它是分离的,索引和工作树到指定的提交。所以您将丢失工作树和索引中的所有更改。此外,如果您要移动到一些较旧的提交,而较新的提交不在其他分支中,您也会丢失这些较新的提交。这不是一项安全的操作,所以除非您真正了解自己在做什么,否则不要这样做。

另见 these great answers有关如何撤消提交的信息。

您可能还会受益于使用 SourceTree 等 GUI 工具。


* 好吧,除非你已经处于分离状态 HEAD陈述一些悬而未决的提交,但通常你不应该担心。

关于git - git reset --hard 和 git checkout 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32230161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com