Git Revert命令拒绝恢复合并

问题描述 投票:3回答:1

我应该是一个简单的案例,但它让我感到神秘,我在这里找不到其他任何实际有效的答案。

我有几个合并到master,我想回滚。我想要的最终结果是master在这些提交之前被设置回来,所以我可以从一个已知的好分支推进以确保master只显示prod-released代码。

这是日志:

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应该关心其他分支机构正在发生的事情。我做了一个pull并且投诉消失了,但是我害怕通过降低我正在恢复的提交来拉动我的恢复。

我对git和github比较陌生,所以我在理解填充方面有很多空白,在这种情况下,我可能会遗漏一些通常被认为更有经验的知识的基本部分或知识。 git用户。

git github commit git-branch revert
1个回答
1
投票

在git中,您可以通过两种方式丢弃不需要的提交:您可以还原它们,或者您可以通过从分支的历史记录中删除它们来删除它们。

从历史中删除

删除提交是整理的最佳方式,但如果其他用户正在分支上工作并且已经撤消了不需要的提交,他们将在下次推送时对其进行抢占。当他们尝试拉动并发现上游历史发生变化时,它们也会让他们感到困惑。因此,通常不建议在共享/公共分支上执行此操作。

如果可以,重置历史记录并丢弃到已知的好处:

git reset --hard <good commit>
git push -f origin HEAD

还原

还原创建一个新的提交,以对抗错误的提交。这在与他人共享但仍留下“混乱的历史”的分支上是安全的。

你做的看起来是正确的。 revert似乎没有做任何事情的事实告诉我,你试图恢复的某些合并提交可能包含在之前的恢复中?

执行revert-ish操作以确保代码与给定时间点完全匹配的确定方法是在此时检出,备份文件,返回要修复的分支,将文件复制到顶部并承诺。它将完全匹配,git将只提交具有差异的文件(即它将具有与恢复相同的效果)。

git checkout -b temp-branch <good-commit>
<copy files somewhere>
git checkout -
<copy files over workspace>
git add .
git commit

确保你没有复制.git目录。有一些方法可以通过使用更多的奥术git命令来实际避免复制,例如git read-tree,但上面的内容很容易理解。

祝好运!

© www.soinside.com 2019 - 2024. All rights reserved.