还原我还原的本地提交并重置为main

时间:2017-10-05 14:56:53

标签: git

好的,所以我有点迷惑,不知道该怎么做。这是我的远程分支的当前状态

commit_1
commit_2
commit_3
...
commit_9
commit_prod_code

1-9的所有提交都需要移动到一个单独的分支,我的主人应该还原为commit_prod_code。为此,我运行了这个命令

git revert HEAD~9..HEAD

我没有意识到的一件事是我没有把no-edit标记。因此,错误地最终改变了所有提交消息"那些承诺。这是我不想要的。

现在我的本地分支落后了9个提交,并且搞乱了提交消息。我想将我的分支重置为主人并执行"恢复"程序再次。

我该怎么办?

更新

这是我目前的状态

$ git log --oneline                                                                                                                        [2h43m] ✭
36557cb revert_commit
7f2c406 revert_commit
9db362e revert_commit
202446d revert_commit
7cb109d revert_commit
ce3ebf7 revert_commit
ad75615 revert_commit
e234267 revert_commit
9285d48 revert_commit
753e421 revert_commit
67aa988 revert_commit
c5c7101 revert_commit
6386a3b revert_commit
28aee0d revert_commit
69c74b6 revert_commit
0e172ec revert_commit
5e1b1cb revert_commit
9b21c68 revert_commit
commit_prod_code

我想要做的是放弃整个恢复过程并返回到我原来的主状态。这个还原的代码没有被推送到任何地方

我尝试了git reset --hardgit reset --hard HEAD^,但最后它仍然显示我的分支是9提交。

我想做的就是取消所有这个rever进程,不要将这些恢复更改推送到上游并将我的分支重置为远程头

2 个答案:

答案 0 :(得分:1)

您可以执行硬重置以返回特定提交:

git reset --hard commit_prod_code

或者,您可以硬重置为原点上的分支:

git reset --hard origin/master

请注意,您将失去"你所有的提交,但听起来就像你想要做的那样。

避免使用git revert。这只会创建反向先前提交的新提交,当您尝试合并回主分支时,这可能会使事情变得混乱。如果提交将其作为共享分支,则只应使用revert。我曾经使用revert一次,它的效果是取消了其他人的更改,因为看起来我特意想要删除一些行,而不仅仅是&#34;不添加它们&#34;。< / p>

根据您的更新,您似乎基本上重写了分支历史记录。您需要做的是回到您的分支中不再存在的原始提交。不要害怕......他们不会离开!

首先,运行git reflog以查看您已检出的所有提交的完整历史记录。滚动历史记录,直到找到要重新开始的提交,然后运行get reset --hard <commit-hash>

现在你已经回滚了令人讨厌的还原提交。

接下来,运行git checkout -b <new-branch-name>。这将创建一个以当前提交为首的新分支,允许您保留新恢复的提交。

最后,返回主分支并运行git reset --hard origin/master以使主分支恢复与服务器的完美同步。

如果您的服务器搞砸了,那么您需要运行git reset --hard <commit-hash-you-want>,然后运行 (danger, danger, danger) git push --force (danger, danger, danger) 的。如果您有其他人与您一起处理此回购,那么您需要警告所有人您即将更改主分支历史记录。这可能需要对乱搞服务器后创建的任何分支进行一些清理。

答案 1 :(得分:0)

尝试从第九次提交创建一个新分支:

git branch newBranch <SHA-1 of 9th commit>

现在newBranch应该有9个提交位于commit_prod_code提交之上。如果你打算将这9个提交放在另一个基础之上,我们可以尝试采摘樱桃或使用rebase。

此时您可能已完成,因为您已在原始分支中进行了合并提交,从而撤消了提交1-9。