将主分支重置为初始提交但保留以前的历史记录
Resetting master branch to initial commit but keeping previous history
我有一个 release
分支,由于在过去 9 个月左右的时间里对代码进行了彻底的重写,该分支与 master
中的分支相比有了很大的进步。
因为 release
和 master 有很大的分歧,所以在 master
中创建 PR 时有很多冲突。 master
的当前内容现在基本上是无关紧要的,因为我已经在 release
分支上工作了很长时间。我想将 master
重置为初始提交(这只是使用 .gitignore
文件进行的回购初始化),同时保持相同的历史记录(除了额外的还原提交)。
我在 master
的 master-backup
分支上尝试了以下操作,然后尝试在 运行 命令之后将发布分支 PR 到这个 master-backup
分支:
git reset --hard <initial commit id>
- 这会重置历史记录
git revert <INITIAL COMMIT ID>^..<LATEST COMMIT ID>
- 这有相同的冲突,并没有完全将所有文件从发布版正确推送到主版。
我不确定现在还能做什么。我的最终目标是用 release
替换 master
的内容,同时保持 master
的当前历史记录,可能还添加了还原提交,当然还有来自 [=10= 的合并] 到 master
.
非常感谢任何帮助。
这听起来很像你想 运行 一个 git merge --no-ff release
来自 master,假设 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
我有一个 release
分支,由于在过去 9 个月左右的时间里对代码进行了彻底的重写,该分支与 master
中的分支相比有了很大的进步。
因为 release
和 master 有很大的分歧,所以在 master
中创建 PR 时有很多冲突。 master
的当前内容现在基本上是无关紧要的,因为我已经在 release
分支上工作了很长时间。我想将 master
重置为初始提交(这只是使用 .gitignore
文件进行的回购初始化),同时保持相同的历史记录(除了额外的还原提交)。
我在 master
的 master-backup
分支上尝试了以下操作,然后尝试在 运行 命令之后将发布分支 PR 到这个 master-backup
分支:
git reset --hard <initial commit id>
- 这会重置历史记录
git revert <INITIAL COMMIT ID>^..<LATEST COMMIT ID>
- 这有相同的冲突,并没有完全将所有文件从发布版正确推送到主版。
我不确定现在还能做什么。我的最终目标是用 release
替换 master
的内容,同时保持 master
的当前历史记录,可能还添加了还原提交,当然还有来自 [=10= 的合并] 到 master
.
非常感谢任何帮助。
这听起来很像你想 运行 一个 git merge --no-ff release
来自 master,假设 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