我们要撤消最后两次提交,这两次提交都被推送到origin master。在togise git中,我们可以查看历史记录,然后单击上次提交的第3个,并选择“reset master to this”,我们猜测这意味着恢复到此版本。
但是,当您选择此选项时,您必须从以下三个选项中选择一个:
不幸的是,我们不知道应该选择哪三个选项中的哪一个 - 我们只想撤消最后两次提交并回到过去。
接下来的问题是这个操作是在远程原点,您的仓库或工作目录上发生的,还是这三个的组合?例如。在还原之后是否必须完成提交和推送,或者它是否为您执行此操作?
我们会猜测HARD是我们想要的 - 它会将存储库(不确定哪个)和我们的本地源代码还原回以前的版本。如果是这种情况,为什么这不是默认值,其他两个选项的用例是什么?您要么还原还是没有,如果您只恢复远程仓库而不是本地工作文件,那么您将处于混乱状态。
我们没有任何本地修改的文件。
请注意,我们非常渴望一个不会破坏git的解决方案(我们过去已经破坏了git并且不得不让新的repo变得疯狂)。也许是另一种可能的方法,例如签出一个流行的版本,然后在最新版本的顶部检查它,但我们不知道如何做到这一点。
我们可以做到这样的事情:
git checkout [revision]
但是我们怎么告诉git我们想让这个版本成为新版本或者用这个替换头?我猜我们不能提交,因为没有什么可以承诺,因为我们不再是主人。顺便说一句,如果你查看一个prev。版本,并修改它,并提交,你提交什么以及在哪里?
我已阅读https://www.atlassian.com/git/tutorials/undoing-changes但它没有解决本地和远程回购之间的关系。如果要撤消的提交都被推送到远程源主站,则不清楚恢复远程源,本地仓库和工作目录的配方是什么 - 所有3必须恢复到提交3提交之前。我们真的不在乎是否通过重置或恢复完成 - 我们只需要一种方法来完成所有3个位置的工作。
可能是肯定的收件人是这样的:
git status (we are on master with a clean working dir)
git git revert HEAD~2
git commit -m "revert"
git push origin mater
但我们从未在示例中看到过这一系列步骤,如果可能的话,宁愿用togise git来做。
答案 0 :(得分:3)
此解决方案节省了我的时间
1)git reset --hard 93827927ed6e245be27f94c93c7e3574e85b91c6(这是您的提交ID)
2)git reset HEAD〜1
3)git stash
4)git add。
5)git commit -m“您的新提交消息在这里”
6)git push --force
答案 1 :(得分:2)
有两种选择:
revert
reset --hard
和push --force
。 如果您不确定,请使用revert
,这是最安全的选择。
如果您确实想要删除提交并且不关心更改的历史记录,请使用reset --hard
和push --force
。这会产生以下后果:
接下来的问题是这个操作是在远程原点,您的仓库或工作目录上发生的,还是这三个的组合?例如。在还原之后是否必须完成提交和推送,或者它是否为您执行此操作?
通常,TortioseGit中的所有更改都在您的克隆中(“工作副本”)。此外,推送始终是手动操作
我们会猜测HARD是我们想要的 - 它会将存储库(不确定哪个)和我们的本地源代码还原回以前的版本。如果是这种情况,为什么这不是默认值,其他两个选项的用例是什么?
因为hard
删除了提交以及历史记录,所以这是一个危险的操作。您也可以删除其他人的更改!
其他两个选项的用例是什么?
请参阅What's the difference between git reset --mixed, --soft, and --hard?
答案 2 :(得分:2)
有两种方法可以做到这一点。
对于第一个解决方案,您可以使用以下命令:
git reset --hard <commit-id>
这会将您当前所在分支的Head带到您认为正确且正确的特定“ commit-id”。
git push -f origin <branch-name>
此命令将强制推送到您所在的分支。此命令与上面的命令结合使用,可以使您从最顶层开始删除分支中所有不必要的提交,直到此“ commit-id “
注意:在从您的分支机构中删除“ commit-id”之前,这不会删除所有“ commit-id”。
对于第二个解决方案,您可以使用以下命令:
git revert <commit-id>
此命令用于还原您要撤消的特定“ commit-id”。
如果错误地将另一个分支合并到另一个分支中,则可以使用以下命令还原合并请求:
git revert -m 2 <commit-id>
此命令用于还原或删除在合并提交“ commit-id”中进行的所有更改。这将允许还原合并提交“ commit-id”,还将删除此合并附带的所有提交更改。但这不会删除合并随附的提交
答案 3 :(得分:0)
我认为您对复原和重置感到困惑,请参阅Undoing Changes:
<强>恢复强>
git revert命令撤消已提交的快照。但是,而不是 从项目历史中删除提交,它会弄清楚如何 撤消提交引入的更改并附加新提交 结果内容。这可以防止Git丢失历史, 这对于修订历史的完整性非常重要 可靠的合作。
重置
如果git revert是一种撤消更改的“安全”方式,你可以想到git 重置为危险方法。当您使用git reset撤消时(和 任何引用或reflog都不再引用提交,有 无法检索原始副本 - 它是永久撤消。必须小心 使用此工具时,因为它是唯一的Git命令之一 这有可能失去你的工作。
可能在你的情况下更好地使用还原:
在这种情况下,您只需创建新的提交,它将还原特定提交,不会更改历史记录。你可以在本地完成,然后推送到远程。
如果您仍想进行重置并且不需要保留本地更改,则需要进行硬重置:
然后你应该强制推动:
git push -f