我试图学习如何恢复或回滚文件和项目到以前的状态,不理解git恢复,签出和重置之间的区别。为什么会有3个看起来相同的命令,什么时候人们应该选择其中一个而不是另一个?
当前回答
这三个命令有完全不同的目的。它们一点都不相似。
git 还原
此命令创建一个新的提交,该提交将撤消上一次提交的更改。这个命令向项目添加新的历史记录(它不会修改现有的历史记录)。
去结帐
这个命令从存储库中签出内容,并将其放入工作树中。它还可以产生其他效果,具体取决于调用命令的方式。例如,它还可以更改当前正在处理的分支。该命令不会对历史进行任何更改。
去重置
这个命令稍微复杂一些。它实际上做了一些不同的事情,这取决于它是如何被调用的。它修改索引(所谓的“暂存区域”)。或者它改变了当前所指向的分支头。这个命令可能会改变现有的历史记录(通过改变分支引用的提交)。
使用这些命令
如果在项目历史的某个地方进行了提交,然后您决定提交是错误的,不应该执行,那么git恢复就是该工作的工具。它将撤销错误提交所带来的更改,并在历史记录中记录“撤销”。
如果您在工作树中修改了一个文件,但还没有提交更改,那么您可以使用git签出来签出该文件的新存储库副本。
如果你已经提交了一次,但还没有与任何人共享,并且你决定不想要它,那么你可以使用git reset重写历史记录,让它看起来好像你从未提交过。
这些只是一些可能的使用场景。还有其他命令在某些情况下也很有用,上面三个命令还有其他用途。
其他回答
重置, 在提交级别,重置是一种将分支的尖端移动到不同提交的方法。这可用于从当前分支删除提交。
回复- - - - - - 还原通过创建一个新的提交来撤销一个提交。这是一种安全的撤销更改的方法,因为它没有机会重写提交历史。 相比之下,git重置会改变现有的提交历史。出于这个原因,应该使用git revert来撤销公共分支上的更改,而应该保留git reset来撤销私有分支上的更改。
你可以看看这个链接- 重置,签出和恢复
这三个命令有完全不同的目的。它们一点都不相似。
git 还原
此命令创建一个新的提交,该提交将撤消上一次提交的更改。这个命令向项目添加新的历史记录(它不会修改现有的历史记录)。
去结帐
这个命令从存储库中签出内容,并将其放入工作树中。它还可以产生其他效果,具体取决于调用命令的方式。例如,它还可以更改当前正在处理的分支。该命令不会对历史进行任何更改。
去重置
这个命令稍微复杂一些。它实际上做了一些不同的事情,这取决于它是如何被调用的。它修改索引(所谓的“暂存区域”)。或者它改变了当前所指向的分支头。这个命令可能会改变现有的历史记录(通过改变分支引用的提交)。
使用这些命令
如果在项目历史的某个地方进行了提交,然后您决定提交是错误的,不应该执行,那么git恢复就是该工作的工具。它将撤销错误提交所带来的更改,并在历史记录中记录“撤销”。
如果您在工作树中修改了一个文件,但还没有提交更改,那么您可以使用git签出来签出该文件的新存储库副本。
如果你已经提交了一次,但还没有与任何人共享,并且你决定不想要它,那么你可以使用git reset重写历史记录,让它看起来好像你从未提交过。
这些只是一些可能的使用场景。还有其他命令在某些情况下也很有用,上面三个命令还有其他用途。
Git签出修改你的工作树, Git重置修改你所指向的分支的引用, Git恢复添加了一个提交撤销更改。
Git恢复用于撤销之前的提交。在git中,你不能修改或删除之前的提交。(实际上你可以,但这会带来问题。)因此,与编辑之前的提交不同,revert引入了一个新的提交,该提交反转了之前的提交。 Git重置用于撤销尚未提交的工作目录中的更改。 Git签出用于将文件从其他提交复制到当前工作树。它不会自动提交文件。
假设你有commit:
C
B
A
git恢复B,将创建一个提交,撤销B中的更改。
git恢复A,将创建一个撤销A中的更改的提交,但不会触及B中的更改
请注意,如果B中的更改依赖于A中的更改,则不可能恢复A。
git重置——软A,将改变提交历史和存储库;暂存和工作目录将仍然处于C状态。
git重置——混合A,将改变提交历史,存储库和staging;工作目录仍然处于C状态。
git重置——硬A,将改变提交历史,存储库,暂存和工作目录;你会完全回到A的状态。
推荐文章
- RPC失败;卷度传输已关闭,剩余未完成的读取数据
- 我应该在.gitignore文件中添加Django迁移文件吗?
- 错误:您对以下文件的本地更改将被签出覆盖
- Git rebase—即使所有合并冲突都已解决,仍然会继续报错
- 在Git中,我如何知道我的当前版本是什么?
- 跟踪所有远程git分支作为本地分支
- 自定义SSH端口上的Git
- git如何显示不存在于.gitignore中的未跟踪文件
- Git错误:遇到7个文件应该是指针,但不是
- GitHub克隆与OAuth访问令牌
- 移动(或“撤销”)最后一个git提交到非暂存区域
- 我可以在GitHub上对要点进行拉请求吗?
- Hg:如何做一个像git的rebase
- 如何丢弃远程更改并将文件标记为“已解决”?
- 如何查看远程标签?