Git Revert命令拒绝还原合并

Git Revert命令拒绝还原合并,git,github,commit,git-branch,revert,Git,Github,Commit,Git Branch,Revert,我有一个简单的案例,但它让我感到困惑,我在这里的任何其他答案中都没有找到任何真正有效的答案 我有几个合并到master,我想回滚。我想要的最终结果是master恢复到提交之前的状态,这样我就可以从一个已知良好的分支中推送,以确保master只显示产品发布的代码 以下是日志: my.username@mysystem MINGW64 /c/Git/REPOSITORY (master) $ git log --oneline e6a1eed (HEAD -> master, origin/m

我有一个简单的案例,但它让我感到困惑,我在这里的任何其他答案中都没有找到任何真正有效的答案

我有几个合并到
master
,我想回滚。我想要的最终结果是
master
恢复到提交之前的状态,这样我就可以从一个已知良好的分支中推送,以确保
master
只显示产品发布的代码

以下是日志:

my.username@mysystem MINGW64 /c/Git/REPOSITORY (master)
$ git log --oneline
e6a1eed (HEAD -> master, origin/master, origin/HEAD) Merge pull request #26         
from PROGRAM/revert-24-int_project_2.1.0
b9b82f0 (tag: PROGRAM_project-2.0.0, origin/int_project_2.0.0,     
int_project_2.0.0) Revert "Merge pull request #24 from     
PROGRAM/int_project_2.1.0"
c4a6573 Revert "PROGRAM_project_2.0.0"
c3aa6d1 (tag: PROGRAM_project_2.0.0) Merge pull request #24 from     
PROGRAM/int_project_2.1.0
**b7e583a** (tag: project_tag_2.1.0_01) Merge pull request #23 from     
PROGRAM/dev_project_2.1.0
**54ecb7a** June 2.1.0 release.
**b67f981** Merge pull request #22 from PROGRAM/int_project_2.0.0
f9b81bc (tag: project_tag_2.0.0_04, origin/int_project_2.0.0fix,     
int_project_2.0.0fix) Merge pull request #21 from PROGRAM/dev_project_2.0.0
以下是我尝试恢复合并的结果(我得到一个合并(#24)已恢复,但后来发现还有两个合并(#22和#23)需要恢复。以下是我尝试恢复时发生的情况:

my.username@mysystem MINGW64 /c/Git/REPOSITORY (master)
$ git revert -m 1 b7e583a
On branch master
Your branch is up to date with 'origin/master'

nothing to commit, working tree clean`
在某一点上,它抱怨我在远程回购中发生了不在本地的变化,这不应该是
master
分支的情况,因为除了在特定情况下,不应该将任何内容推送到该分支,所以我不确定git为什么应该关心其他分支中发生的事情laint离开了,但我担心拉会覆盖我的恢复,因为我正在恢复的提交会被拉下来


我对git和github比较陌生,所以我在理解上有很多空白需要填补,在这种情况下,我可能缺少一些基本的知识,这些知识通常被认为是更有经验的git用户所知道的。

在git中,可以通过两种方式丢弃不需要的提交:可以还原它们,也可以通过以下方式删除它们:将它们从分支机构的历史记录中删除

脱离历史 删除提交是最整洁的整理方式,但是如果其他用户正在处理分支并且已经拉取了不需要的提交,他们将在下次推送时重新推送这些提交。当他们尝试拉取并且发现上游历史记录已更改时,这也会使他们感到困惑。因此,通常不建议在分支上这样做共享/公共分支机构

如果这是正常的,要重置历史并丢弃到已知的良好点:

git reset --hard <good commit>
git push -f origin HEAD
git重置——硬
git-push-f原点磁头
还原 还原将创建一个新的提交,该提交会对错误的提交进行反击。在与其他人共享的分支上执行此操作是安全的,但会留下“混乱的历史记录”

您所做的看起来是正确的。事实上,还原似乎没有做任何事情,这向我表明,您尝试还原的某些合并提交可能包含在以前的还原中

执行还原操作以使代码与给定时间点完全匹配的可靠方法是在该时间点签出、备份文件、返回到要修复的分支、复制文件并提交。它将完全匹配,git只提交有差异的文件(即它将具有与还原相同的效果)

git签出-b临时分支
git签出-
git添加。
git提交
确保不要复制
.git
目录。通过使用更神秘的git命令,例如
git read tree
可以避免复制,但上面的内容很容易理解


祝你好运!

因此,根据你的回复建议,如果我根据在我想要回复到的点上完成的发布创建分支,我应该能够将其用于你提到的“良好提交”?是的,没错。如果你有一个发布标记,你可以将标记名放在
的位置
git checkout -b temp-branch <good-commit>
<copy files somewhere>
git checkout -
<copy files over workspace>
git add .
git commit