首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Git还原误解

Git还原误解
EN

Stack Overflow用户
提问于 2014-09-21 09:27:57
回答 3查看 210关注 0票数 1

有人能解释一下git还原是如何工作的吗?

目前,我在我的应用程序中犯了一些错误,我把修改推到了主分支。现在我找到了工作提交,我希望将我的主分支重置为工作提交。

所以我的问题是,如果我输入git-revert 145bb80,我的所有文件会和原来的提交文件一样: 145bb80吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-21 09:45:53

所以我的问题是,如果我输入git-还原145bb80,那么我的所有文件是否都和原来的提交文件一样:145 bb80?

问得好,答案是否定的。我猜想您来自Subversion land (就像我一样),还原意味着一些不同的东西--它是对您的工作副本的操作,而不是存储库。在Git中,git revert的目的是逆转单个提交的更改,而不是将整个树恢复到特定的状态。

您要查找的命令是git reset--尽管有一些用于工作树和索引的表单。有几种不同的形式。如果您想使分支指向145bb80,那么您将在该分支上运行git reset --hard 145bb80。结果将发生两件事:

1)您的分支将被迫指向145bb80。已经发生的任何其他提交都将丢失。这是一种历史重写的形式,所以要确保这是你想要做的。如果您试图推送分支,也会得到一个错误。它将告诉您,它不是快速转发提交,您需要git push --force将其强制到远程存储库中。再说一次,小心点。确保这是你的团队想要的。

2) git reset --hard将删除索引和工作树中的任何本地更改。因此,如果您想保存它们,则需要在使用git reset --hard之前将它们保存起来。

还有另一种选择,危险程度要小得多。这将是恢复还原。这听起来有点傻,但让我们以一种快速的方式继续你的历史。

另外,如果您只想要一个文件的副本,就像它在145bb80中一样,那么您也可以使用以下方法来完成:

代码语言:javascript
复制
git checkout 145bb80 -- path/to/file

可以使用以下方法将树还原为145bb800中的内容:

代码语言:javascript
复制
git checkout 145bb80 -- .

尽管如此,还是要小心这种命令,因为您可能会失去工作。

您的最佳选择是简单地使用git revert恢复错误提交,以避免其他人取消工作。

票数 2
EN

Stack Overflow用户

发布于 2014-09-21 09:47:19

Git还原会创建一个新的提交,它与您想要撤消的提交相反。因此,这肯定是您想要的,因为您已经推动了您的更改,并且您也需要在上游撤消您的更改(我想)。它确实会让你的文件回到你想要的状态。当然,这不会抹杀你错误的历史。

您还可以在一系列提交中使用revert:

代码语言:javascript
复制
git revert OLDER_COMMIT^..NEWER_COMMIT
票数 1
EN

Stack Overflow用户

发布于 2014-09-21 09:55:00

如果您已经将更改推送到远程存储库,则最好不要使用命令git reset,特别是对于--hard,这是很危险的。远程存储库可能不允许强制推送,因为git reset将修改您的提交历史记录,并使您的推送非前向合并。即使允许,它也可能破坏其他已经从git服务器(远程中央存储库)撤出的历史。

最好使用git revert。它将创建一个新的提交,以扭转您先前错误提交的效果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25957760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档