仅使用git-restore<commit_hash>是行不通的。显然,必须指定-m。


当前回答

有时,回滚的最有效方法是后退并替换。

git日志

使用第二个提交哈希(完整哈希,在列出错误之前要恢复到的哈希),然后从那里重新广播。

git checkout-b newbranch<HASH>

然后删除旧分支,将新分支复制到原来的位置,然后从那里重新启动。

git branch -D oldbranch
git checkout -b oldbranch newbranch

如果已广播,则从所有存储库中删除旧分支,将重做的分支推到最中心,然后将其拉回到所有存储库。

其他回答

这是一个非常古老的线索,但我认为缺少另一个方便的解决方案:

我从不恢复合并。我只是从修订版中创建了另一个分支,其中所有内容都正常,然后从中间添加的旧分支中选择所有需要选择的内容。

因此,如果GIT历史是这样的:

dcb<<<合并一...

我从a、cherry pick c和d中创建了一个新分支,然后新分支从b中清除。我可以再次决定在新分支中合并“b”。如果不再需要“b”或“b”仍在另一个(功能/修补程序)分支中,旧分支将被弃用,并将被删除。

现在唯一的问题是计算机科学中最困难的事情之一:如何命名新分支

好的,如果你特别是在devel中失败,你可以如上所述创建newdevel,删除旧的devel并将newdevel重命名为devel。任务完成。现在,您可以在需要时再次合并更改。这就像以前从未合并过。。。。

正确标记的答案对我有用,但我必须花一些时间来确定发生了什么。所以我决定为我这样的情况添加一个简单明了的答案。。

假设我们有分支A和B。您将分支A合并到分支B中,并将分支B推到自身,因此现在合并是它的一部分。但是您希望返回到合并之前的最后一次提交。。你是做什么的?

转到git根文件夹(通常是项目文件夹)并使用git日志您将看到最近提交的历史记录-提交具有提交/作者/日期财产,而合并也具有合并属性-因此您可以这样看它们:提交:<commitHash>合并:<parentHashA><parentHashB>作者:<Author>日期:<Date>使用gitlog<parentHashA>和gitlog<ParetHashB>-您将看到这些父分支的提交历史记录-列表中的第一个提交是最新的获取所需提交的<commitHash>,转到git根文件夹并使用git checkout-b<newBranchName><commitHash>,这将从合并前选择的最后一次提交开始创建一个新分支。。瞧,准备好了!

git revert -m 1 <merge-commit>

为了保持日志的整洁(这种方法有一些缺点(由于push-f)):

git checkout <branch>
git reset --hard <commit-hash-before-merge>
git push -f origin HEAD:<remote-branch>

“合并前提交哈希”来自合并后的日志(gitlog)。

正如Ryan所提到的,git-restore可能会使合并变得困难,因此git-restore也许不是您想要的。我发现在这里使用git reset-hard<commit hash before merge>命令更有用。

完成硬重置部分后,可以强制推送到远程分支,即git push-f<remote name><remote branch name>,其中<remote name>通常被命名为origin。从那时起,如果您愿意,可以重新合并。