【问题标题】:Is there a difference between git reset --hard HEAD and git checkout .?git reset --hard HEAD 和 git checkout 之间有区别吗?
【发布时间】:2011-07-04 23:15:18
【问题描述】:

如果我对工作树进行了更改但尚未提交,并且我想恢复我所做的更改,那么两者之间是否有区别

git reset --hard HEAD

git checkout .

?

【问题讨论】:

标签: git revert


【解决方案1】:

这些答案很好。我想补充一点,如果您删除了已暂存但尚未提交的文件,那么单独的 git checkout . 不会将已删除的文件带回工作区。 git reset --hard 会。

【讨论】:

    【解决方案2】:

    git checkout -- . 显然只会在当前目录(及其子目录)上运行,git reset --hard 将在整个工作树上运行。

    git checkout -- . 只会更新工作树并保留已暂存的文件,而git reset --hard 会将索引和工作树与 HEAD 提交匹配。

    与 refspec 一起使用时:

    1. reset 会将当前分支头设置为给定的提交(并匹配索引和工作树)
    2. checkout 将切换到该分支,当它们触及在当前分支和要签出的分支之间没有更改的文件时,本地更改保持不变

    【讨论】:

    • git checkout -- .似乎也在清理临时区域。我不确定第一点,因为我总是在根目录之外工作。
    • @Moondra 我刚刚再次尝试使用 Git 2.24,但无法确认您的说法。 git checkout 保持暂存区域不变,因此已暂存的文件将保持暂存状态。
    • 其实git checkout HEAD -- .似乎清除了暂存区。我实际上在它上面做了一个单独的线程,因为我认为它们是相同的。 stackoverflow.com/questions/59339986/… 但你是对的。我正在使用 HEAD。对不起
    猜你喜欢
    • 2020-04-07
    • 2017-12-10
    • 2011-09-06
    • 2011-02-02
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2018-01-13
    • 2014-08-25
    相关资源
    最近更新 更多