【问题标题】:Resetting master branch to initial commit but keeping previous history将主分支重置为初始提交但保留以前的历史记录
【发布时间】:2020-12-23 22:40:30
【问题描述】:

我有一个 release 分支,由于在过去 9 个月左右的时间里对代码进行了彻底的修改,它与 master 中的分支相比有了很大的发展。

因为release与master有很大的分歧,所以在创建一个PR到master时会有很多冲突。 master 的当前内容现在基本上是无关紧要的,因为我已经在 release 分支上工作了很长时间。我想将 master 重置为初始提交(这只是使用 .gitignore 文件进行的 repo 初始化),同时保持相同的历史记录(除了额外的还原提交)。

我在取自 mastermaster-backup 分支上尝试了以下操作,然后在运行命令后尝试将发布分支 PR 到此 master-backup 分支:

git reset --hard <initial commit id> - 这会重置历史记录

git revert <INITIAL COMMIT ID>^..<LATEST COMMIT ID> - 这有相同的冲突,并不能完全正确地将所有文件从发布版推送到主控版。

我不知道现在还能做什么。我的最终目标是用release 替换master 的内容,同时保持master 的当前历史记录,添加可能的还原提交,当然还有从releasemaster 的合并。

非常感谢任何帮助。

【问题讨论】:

  • 没有理由将master 重置为任何内容。在合并期间接受来自release 的所有更改。比如:stackoverflow.com/a/25751748/1265393
  • 这是我怀疑应该发生的事情,但其中一些更改包括文件的完整重组。公关/合并到master 时,旧文件仍然存在。

标签: git merge rebase


【解决方案1】:

听起来你很想从 master 运行 git merge --no-ff release,假设 master 自发布开始以来没有移动。然后你可以在 master 之后的一次提交中获得发布的内容(以及一个包含所有发布开发的分支。

如果您希望在 master 之后进行一次提交,其中包含发布的所有更改,放弃发布如何变成现在这样的细节,这就是您要做的:

git checkout --detach release
git reset --soft master
git commit -m "All of release in a single commit"
# If you like the result:
git branch -f master
git checkout master

如果 master 和 release 出现分歧,并且您希望 强制 master 和 release 之间的合并并保持 release 的内容 原样 完整,那么您可以这样做像这样:

git commit-tree -p master -p release -m "Merge of release.... keeping release as is" release^{tree}

这将在输出中写入一个 ID。这是已创建的新修订。它将是master和release的合并,内容就像release一样,没有区别。因此,请随时查看,如果您喜欢结果:

# once you have already checked out the new revision
git branch -f master
git checkout master

【讨论】:

  • master 已经进行了 3 次提交,但这些都是很小的更改,它们被手动复制到 release,这很糟糕,并且使它成为 PITA。我怀疑这也会导致问题我还应该说master 有一些分支策略,这意味着我只能提交 PR 而不能通过 git bash 合并到 master 中。所以我可能不得不创建一个 master 的副本,在该分支上运行命令,然后将该分支 PR 到 master。
  • 好的...让我添加一些额外的技巧
  • 我在上面的评论中添加了一些额外的上下文 - 不确定你是否读懂了,因为我怀疑我编辑的速度不够快
  • 我想我了解了整个上下文。让我知道它是如何与 hack 配合使用的。
  • 这成功了!我拿了一份master 的副本并将git commit-tree 从发行版运行到副本上。我现在已经从副本创建了一个 PR,没有任何问题,并且构建已经通过。非常感谢您的帮助!直到今天才真正听说过git commit-tree,并且正在尝试使用通常的变基、重置和还原。
猜你喜欢
  • 2015-04-17
  • 2010-11-02
  • 2014-06-29
  • 2015-10-19
  • 2017-09-11
  • 2015-04-20
  • 1970-01-01
  • 2021-06-12
  • 1970-01-01
相关资源
最近更新 更多