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


当前回答

如果您希望恢复刚才所做的更改,这是一个非常简单的答案:

commit 446sjb1uznnmaownlaybiosqwbs278q87
Merge: 123jshc 90asaf


git revert -m 2 446sjb1uznnmaownlaybiosqwbs278q87 //does the work

其他回答

git文档关于git revert-m提供了一个链接,准确地解释了这一点:https://github.com/git/git/blob/master/Documentation/howto/revert-a-faulty-merge.txt

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

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

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

-m1是被修复的当前分支的最后一个父级,-m2是合并到其中的分支的原始父级。

如果命令行令人困惑,Tortoise Git也可以在这里提供帮助。

我在一个已合并到GitHub回购主分支的PR上也遇到了这个问题。

因为我只是想修改一些修改过的文件,而不是PR带来的全部更改,所以我不得不用gitcommit-am修改合并提交。

步骤:

转到要更改/还原某些已修改文件的分支根据修改的文件执行所需的更改运行git-add*或git-add<file>运行gitcommit--am并验证运行git push-f

为什么有趣:

它使公关的作者承诺保持不变它不会破坏git树您将被标记为提交人(合并提交作者将保持不变)Git就像你解决了冲突一样,它会删除/更改修改文件中的代码,就像你手动告诉GitHub不要按原样合并它一样

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

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

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