好的,所以我有点迷惑,不知道该怎么做。这是我的远程分支的当前状态
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 --hard
和git reset --hard HEAD^
,但最后它仍然显示我的分支是9提交。
我想做的就是取消所有这个rever进程,不要将这些恢复更改推送到上游并将我的分支重置为远程头
答案 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。