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

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


当前回答

如果你错误地做了一个还原:

git revert <commit-id>

你只需要运行:

git cherry-pick <commit-id>

我必须使用这个命令来提交我的更改。

你可以通过以下命令获取你的提交ID:

git log --pretty=format:"%h - %an, %ar : %s"

其他回答

Git cherry-pick <原始提交sha> 将复制原始提交,本质上是重新应用提交

还原将做同样的事情,与一个更混乱的提交消息: Git revert <commit sha of revert>

这两种方式都允许您在不覆盖历史记录的情况下进行git推送,因为它会在还原后创建一个新的提交。 当输入commit sha时,通常只需要前5或6个字符: Git选择6bfabc

我是这样做的: 如果分支my_branchname包含在被还原的合并中。我想取消my_branchname:

我首先从my_branchname执行git checkout -b my_new_branchname。 然后我做一个git重置——软$COMMIT_HASH,其中$COMMIT_HASH是my_branchname第一次提交之前的提交哈希(见git日志) 然后我新建一个commit git commit -m "Add back reverted changes" 然后我向上推新的分支git推origin new_branchname 然后我对新分支提出了拉请求。

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

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

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

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 checkout -b <new-branch> and git cherry-pick <commit> the before to the and git rebase to drop revert commit。像以前一样发送拉请求。