Git 以非破坏性方式恢复到以前的提交

Git 以非破坏性方式恢复到以前的提交,git,Git,我们需要恢复到以前的提交,但由于提交后的更改已推送到生产环境中,我们无法使用git reset销毁回购历史记录 恢复到过去的提交已经得到解决,但都不能提供令人满意的非破坏性解决方案 我们试图通过在一个单独的分支中签出上一个commit来跟踪,但是当我们试图将它合并到master中时,我们得到了一条“已经是最新的”消息,但什么也没有发生 $ git checkout 0766c053 -b reverted $ git checkout master $ git merge reverted Al

我们需要恢复到以前的提交,但由于提交后的更改已推送到生产环境中,我们无法使用
git reset
销毁回购历史记录

恢复到过去的提交已经得到解决,但都不能提供令人满意的非破坏性解决方案

我们试图通过在一个单独的分支中签出上一个commit来跟踪,但是当我们试图将它合并到master中时,我们得到了一条“已经是最新的”消息,但什么也没有发生

$ git checkout 0766c053 -b reverted
$ git checkout master
$ git merge reverted
Already up-to-date.

毫无疑问,有人可以编造一个
git reset
序列来完成这项工作,但下面是直接的方法:

git checkout -B master $(
        git commit-tree -p master -m - 0766c053^{tree} 
)

git commit——修改它以添加提交消息。

毫无疑问,有人可以编造一个
git reset
序列来执行此操作,但下面是直接的方法:

git checkout -B master $(
        git commit-tree -p master -m - 0766c053^{tree} 
)
git commit——修改它以添加一条提交消息。

我得到了它,多亏了@Amadan和@bobsocom,害羞而神秘,他们罚款了,然后删除了它并离开了

以下是您需要做的全部工作:

git revert --no-commit 0766c053..HEAD
这会将所有内容从头部恢复到提交散列。(无提交标志允许git一次恢复所有提交,而不是在历史记录中乱丢范围内每次提交的消息。)

我得到了它,这要感谢@Amadan和@Bobsocom,害羞而神秘,他们罚款后删除了它,然后离开了

以下是您需要做的全部工作:

git revert --no-commit 0766c053..HEAD

这会将所有内容从头部恢复到提交散列。(使用
--no commit
标志,git可以一次还原所有提交,而不是在历史记录中乱丢范围内每个提交的消息。)

git revert
中有什么不满意的地方?似乎这正是您要查找的内容。@Amadan-
git revert
只还原一个特定的提交,而忽略此后所做的任何提交。我们需要恢复到以前的提交。Git没有
Git revert--to
函数。啊,我明白了。在这种情况下,这应该会有所帮助:git revert中到底有什么不满意的地方?似乎这正是您要查找的内容。@Amadan-
git revert
只还原一个特定的提交,而忽略此后所做的任何提交。我们需要恢复到以前的提交。Git没有
Git revert--to
函数。啊,我明白了。在这种情况下,这应该会有所帮助:@Amadan的链接更好地解释了我所说的话。不想让自己看起来像是在炫耀他的荣耀:)别担心+1.你写了一个正确的答案。另外,可能值得注意的是一种通用语法:如果您想将所有内容从X还原为Y,
X^..Y
可以工作。(
X..Y
将还原X之后的所有内容,而不是X本身)。@Amadan的链接更好地解释了我所说的。不想让自己看起来像是在炫耀他的荣耀:)别担心+1.你写了一个正确的答案。另外,可能值得注意的是一种通用语法:如果您想将所有内容从X还原为Y,
X^..Y
可以工作。(
X..Y
将还原X之后的所有内容,而不是X本身)。