有人能解释一下git还原是如何工作的吗?
目前,我在我的应用程序中犯了一些错误,我把修改推到了主分支。现在我找到了工作提交,我希望将我的主分支重置为工作提交。
所以我的问题是,如果我输入git-revert 145bb80,我的所有文件会和原来的提交文件一样: 145bb80吗?
发布于 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中一样,那么您也可以使用以下方法来完成:
git checkout 145bb80 -- path/to/file可以使用以下方法将树还原为145bb800中的内容:
git checkout 145bb80 -- .尽管如此,还是要小心这种命令,因为您可能会失去工作。
您的最佳选择是简单地使用git revert恢复错误提交,以避免其他人取消工作。
发布于 2014-09-21 09:47:19
Git还原会创建一个新的提交,它与您想要撤消的提交相反。因此,这肯定是您想要的,因为您已经推动了您的更改,并且您也需要在上游撤消您的更改(我想)。它确实会让你的文件回到你想要的状态。当然,这不会抹杀你错误的历史。
您还可以在一系列提交中使用revert:
git revert OLDER_COMMIT^..NEWER_COMMIT发布于 2014-09-21 09:55:00
如果您已经将更改推送到远程存储库,则最好不要使用命令git reset,特别是对于--hard,这是很危险的。远程存储库可能不允许强制推送,因为git reset将修改您的提交历史记录,并使您的推送非前向合并。即使允许,它也可能破坏其他已经从git服务器(远程中央存储库)撤出的历史。
最好使用git revert。它将创建一个新的提交,以扭转您先前错误提交的效果。
https://stackoverflow.com/questions/25957760
复制相似问题