4

我不小心向一个我不打算的分支提交了一系列提交。我本来打算把它们放进去,master但最终把它们放在我们将调用的共享分支上integ。我想找到一种方法来删除这些提交integ并将它们放在上面master;我希望他们永远不会存在于integ.

两者都已在 github 上共享integmasterinteg分支由我们的 CI 环境使用。

我读过这git rebase是一个选项,但从我读过的内容来看,它将使 integ 分支无法继续使用,因为它的历史记录中有已被重新播放到master. 具体来说,我指的是:

http://blog.evan.pro/a-simple-explanation-of-git-rebase

它在哪里说:

此时不要从原点/功能/我的主题拉取、合并或变基!!!

为什么不?因为 Git 只是想,“哦,看,origin/feature/my-topic 有两个提交(D 和 E),我们在 feature/my-topic 本地没有。让我们把它们合并进去!”……虽然这是个问题,因为我们确实有这些提交,但是当我们运行 git rebase 时,它​​们的哈希值被重新写入 F 和 G。

我的问题是:

  • 我怎样才能恢复这些分支的状态,以使 10 次提交integ最终出现master并且integ看起来好像从未有过这些提交?
  • 那可能吗?
  • 如果没有,我如何回到可以继续的地方?

提前致谢!

4

3 回答 3

2

以下是将最后 3 个提交从integ移至master.

git checkout master
git cherry-pick integ^^
git cherry-pick integ^
git cherry-pick integ
git checkout integ
git reset --hard HEAD~3
于 2013-04-16T01:30:13.513 回答
2

你不能从 git 的历史中“删除”一些东西。您可以revert使用提交

git revert HEAD~n 

或者

git revert $SHA1_HASH

完成此操作后,您必须从提交中创建补丁并手动将它们应用到您的 master 分支或 use git cherry-pick,这基本上是相同的(感谢 sleske 的提及!)

于 2013-04-15T22:02:34.750 回答
0

如果您想将提交从“integ”应用到“master”,您应该进行合并。首先尝试执行此操作以确保不会丢失更改。如果没有人对 master 进行提交,则将是快进合并。然后你可以担心你将如何从 integ 中删除这些提交(我不知道如何)。

于 2013-04-15T22:26:48.560 回答