我一直认为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 中可以了解到,checkout 和 reset 可以模拟 rebase 操作。
git checkout bar
git reset --hard newbar
git branch -d newbar
-- files
变体可能是可以的;我不确定。)那个图表让人觉得主要区别在于它们是否影响索引或者工作目录。请见我的回答。第二和第三个图表非常有帮助,可以看到真正的差异。第四和第五个图表有助于检查你是否理解这些命令的含义,但不会真正帮助你达成目标。 - LarsHthink-like-a-git.net
文章中提供),以防止数据丢失。 - cowlinator