【发布时间】:2011-04-08 01:10:52
【问题描述】:
我一直认为git reset 和git checkout 是相同的,因为两者都将项目带回特定的提交。但是,我觉得它们不可能完全相同,因为那将是多余的。两者之间的实际区别是什么?我有点困惑,因为 svn 只有 svn co 来恢复提交。
添加
VonC 和 Charles 很好地解释了 git reset 和 git checkout 之间的区别。我目前的理解是git reset 将所有更改恢复到特定提交,而git checkout 或多或少为分支做准备。我发现以下两个图表对理解这一点非常有用:
增加了 3 个
从http://think-like-a-git.net/sections/rebase-from-the-ground-up/using-git-cherry-pick-to-simulate-git-rebase.html,结帐和重置可以模拟变基。
git checkout bar
git reset --hard newbar
git branch -d newbar
【问题讨论】:
-
回复:“它是错误的还是过于简化了?”是的,第一个图表在结帐和重置之间的区别方面具有误导性。 (关于
-- files变体可能没问题;我不确定。)该图看起来主要区别在于它们是否影响索引或WD。请参阅我的回答。第 2 和第 3 图表对于查看真正的差异非常有帮助。第 4 和第 5 个图表有助于检查您是否了解这些命令的作用,但并不能真正帮助您实现目标。 -
我发现“Git Tools Reset Demystified”的 "Check it out" 部分给出了最有用的总结。
-
prosseek:如果你同意@LarsH 第一张图有误导性,你能把它删掉吗?
-
请注意,checkout 和 reset 只模拟 rebase 的第二部分,并且需要额外的步骤(在链接的
think-like-a-git.net文章中提供)以防止数据丢失。
标签: git git-checkout git-reset