给定一个已经使用commit提交,然后使用revert恢复的更改,那么撤消该恢复的最佳方法是什么?

理想情况下,这应该通过一个新的提交来完成,这样就不会重写历史。


当前回答

我有一个问题,有人做了一个恢复到主到我的分支,但我需要能够合并它,但问题是,恢复包括我所有的提交。 让我们看看这种情况,我们从M1创建了我们的特征分支,我们在M3中合并了我们的特征分支,并在RM3中恢复它

M1 -> M2 -> M3 -> M4- > RM3 -> M5
 \.         /
  F1->F2 -

如何使F2能够合并到M5?

git checkout master
git checkout -b brach-before-revert
git reset --hard M4
git checkout master
git checkout -b new-feature-branch
git reset --hard M1 
git merge --squash brach-before-revert

其他回答

如果你不喜欢“还原还原”这个想法(特别是当这意味着丢失多次提交的历史信息时),你可以随时查看git文档中关于“还原错误合并”的内容。

给定下面的起始情况

 P---o---o---M---x---x---W---x
  \         /
   A---B---C----------------D---E   <-- fixed-up topic branch

(W是归并M的初始还原;D和E修复了你最初损坏的特性分支/提交)

你现在可以简单地重放提交A到E,这样它们都不“属于”被还原的合并:

$ git checkout E
$ git rebase --no-ff P

分支的新副本现在可以再次合并到主分支:

   A'---B'---C'------------D'---E'  <-- recreated topic branch
  /
 P---o---o---M---x---x---W---x
  \         /
   A---B---C----------------D---E

恢复还原程序就可以了

例如,

如果abcdef是你的提交,ghijkl是你还原abcdef时的提交,那么运行:

git revert ghijkl

这将还原还原

在我的例子中,我需要在恢复后提交更改,然后才能在没有失败的情况下选择原始提交。

git commit -m "Make changes (original commit)."
git revert <original commit hash>
git commit -m "Revert original commit."
git cherry-pick <original commit hash>

在最初意外删除所有文件的恐慌之后,我使用以下方法来取回我的数据

git reset HEAD@{1}         
git fsck --lost-found      
git show 
git revert <sha that deleted the files>

或者你可以用git checkout -b <new-branch> and git cherry-pick <commit> the before to the and git rebase to drop revert commit。像以前一样发送拉请求。