最近我开始为我的项目实施新的实验功能。不幸的是,我在开始之前忘记了分支,并将几个提交推送到共享存储库服务器到主分支。由于其他人可能已经检查了我的提交,我想避免覆盖服务器上的历史记录。
由于我的更改,master 目前不稳定,这也不好。因此,我想恢复对 master 所做的更改,创建一个单独的分支来包含这些更改,并且一旦它们足够稳定,仍然能够将它们重新引入(合并)回 master。
最近我开始为我的项目实施新的实验功能。不幸的是,我在开始之前忘记了分支,并将几个提交推送到共享存储库服务器到主分支。由于其他人可能已经检查了我的提交,我想避免覆盖服务器上的历史记录。
由于我的更改,master 目前不稳定,这也不好。因此,我想恢复对 master 所做的更改,创建一个单独的分支来包含这些更改,并且一旦它们足够稳定,仍然能够将它们重新引入(合并)回 master。
此答案使用命令行工具并采用不同的方法来管理分支。它可能比使用不同风格的多次重置更容易混淆。
Git 1.7.2 及更高版本中的revert
命令可以在一个命令中恢复多个提交:
git revert last-stable..
last-stable
这将为直到当前 HEAD 提交(以相反顺序)之后的每个提交创建还原提交。如果您正在处理许多不需要的提交,那么您可能希望在一次提交中将它们全部还原:
git revert -n last-stable..
git commit # edit the message to explain that you are reverting multiple commits
以下是如何将它与其他一些命令放在一起以在还原提交之上重新建立您的实验分支:(
假设共享分支被命名master
)
# Make sure we have the latest shared master
git checkout master
git pull
# Mark the last experimental commit
git branch experimental
# Revert the experimental commits
git revert last-stable.. # optionally use -n and manually commit batched reverts
# Replay the experimental commits on top of the reverted commits
git checkout -B experimental master
git cherry-pick last-stable..experimental@{1}
我在写问题时已经想出了问题的解决方案。我描述了这个解决方案,希望它将来对某人有用。对于我使用 gitk 和 git-gui 的所有更改。我建议您这样做,因为它比使用命令行更容易,并且您将对正在发生的事情有一个直观的了解。以下是我已采取的步骤:
为了安全起见,我建议您在本地进行所有更改,并仅在完成后推送它们并确保一切正确。然后,如果出现错误,您始终可以删除存储库并从共享服务器再次克隆它。