Git反向合并提交并将主机移回上一次提交

Git反向合并提交并将主机移回上一次提交,git,bitbucket,sourcetree,Git,Bitbucket,Sourcetree,我一直面临着一些关于我的主分支的问题。我不小心把一些很旧的文件推给了我的主分支 现在,我希望我的主控程序和源程序返回到以前的提交(在图片中用蓝色突出显示),并放弃源程序和历史记录中在此之后的所有其他提交,以便在此之后推送我的新提交。我正在使用bitbucket和SourceTree 你会怎么做 最好创建一个新提交,该提交与旧“预订”提交完全相同: 第一: git checkout master git branch tmp # let's mark th

我一直面临着一些关于我的主分支的问题。我不小心把一些很旧的文件推给了我的主分支

现在,我希望我的主控程序和源程序返回到以前的提交(在图片中用蓝色突出显示),并放弃源程序和历史记录中在此之后的所有其他提交,以便在此之后推送我的新提交。我正在使用
bitbucket
SourceTree

你会怎么做


最好创建一个新提交,该提交与旧“预订”提交完全相同:

第一:

 git checkout master
 git branch tmp                    # let's mark the current master (with wrong commit)
然后:

这样,就没有
过滤器分支
(这将重写历史记录),没有
恢复
(当涉及合并时,这可能会很复杂)


要了解有关“重置魔法”的更多信息,请阅读“”

第一个
reset--硬恢复正确的内容(但也移动头部和重置索引)

第二个
reset(--mixed)
将把磁头恢复到原来的位置,同时也将恢复索引。但它会让工作的树保持原样

这样,
master
索引和工作树之间就有了区别,工作树表示旧提交的内容。

添加和提交就足以在当前
主控
上创建一个新的提交,并使用旧的提交内容。

我没有得到答案。
重设--hard
将带我们进入预订提交,对吗?您做了
软重置
,哪些应该删除提交,但保留更改?还是我搞错了?然后你在一个新的提交中做了同样的更改并推送了它?@Deep事实上,这里需要一个重置-混合:你想将HEAD和index重置为原始主文件,但保留Booking的工作树。一旦你有了这些,你可以添加和提交,以便将预订内容恢复到新的提交中。抱歉@VonC,我仍然有点困惑。因此,如果您将
reset--hard
这些提交的更改将丢失?我在我的一根树枝上试过,结果也一样。假设我返回一次提交,并使用
--硬重置
。现在,
reset tmp
只会将头部设置为该提交。现在为什么要添加和提交?因为我在文件夹中没有任何更改?@Deep混合重置将重置头和索引,而不是工作树。这意味着您可以返回到当前的主服务器,但其中包含表示所需内容的文件(预订)。与您当前的主索引相比,这些文件引入了更改:您添加并提交该内容。我在本地尝试了此操作,当我运行此
git reset tmp
时,它再次将相同的合并提交带回分支。我去了
master
创建了一个重复的分支
tmp
。做了最后一次
merge
commit,然后做了
git-reset-tmp
。当我看到
git log
时,会显示相同的提交。我做错什么了吗?抱歉,我只是觉得这很有趣,并试图理解解决方案。
 git reset --hard <SHA1 'Booking'> # reset worktree and index of master
                                   # to Booking content
 git reset tmp                     # reset master HEAD and index to its original position 
                                   # (but keep working tree of Booking)
 git add .
 git commit -m "restore Booking"
 git push