Алексей Ковальчук Asked:2021-11-09 12:44:53 +0000 UTC2021-11-09 12:44:53 +0000 UTC 2021-11-09 12:44:53 +0000 UTC 如何在git中将旧提交合并为一个? 772 我有一个 git 存储库,我想将一些旧提交合并为一个。 这些提交不是最新的,我知道这会改变 git 历史。 这是我想做的一个例子,有这些提交: 我想将它们全部合并到一个共同的提交“Made os connection log”中,其中将包含它们的全部更改,即本质上是 squash,仅适用于旧提交。 这是一个例子,基于它我想做很多连接。 那么该怎么做呢? git 3 个回答 Voted Mikhail Murugov 2021-11-09T13:35:15Z2021-11-09T13:35:15Z 我们有: 我们的确是: git rebase -i 5537cb77d8dcb72dd70a852efdec2108c99ad3fe Where 5537cb77d8dcb72dd70a852efdec2108c99ad3fe-我们要折叠某些内容的提交的 SHA(在您的情况下,这是带有消息的提交的 SHA )Merge remote...。 对于我们想要折叠到最顶层提交的那些提交,更改pick为:squashpick 如有必要,更改新提交的消息。 之后我们有: 那些。“胶合”commit2和commit3,commit4和commit5. 推送这些更改remote仅适用于-force标志。 Герман Борисов 2021-11-09T13:01:00Z2021-11-09T13:01:00Z 您需要将整个历史记录从第一个合并提交到最后一个可用的提交(包括)重新定位到作为第一个合并提交的祖先的相同提交。 在 rebase 过程中,可以合并部分提交,例如,以交互方式。 一些 git 的 gui 包装器(例如 TortoiseGit)允许您自动执行此过程,但仍将通过 git rebase 完成 Best Answer Алексей Ковальчук 2021-12-01T03:01:04Z2021-12-01T03:01:04Z 如果提交的历史很深,则没有正常的方法可以做到这一点。Rebase 将强制您重新解决所有合并提交冲突。 因此,我编写了自己的实用程序,允许您自动执行此操作:https ://github.com/lokha/git-recreator
我们有:
我们的确是:
Where
5537cb77d8dcb72dd70a852efdec2108c99ad3fe-我们要折叠某些内容的提交的 SHA(在您的情况下,这是带有消息的提交的 SHA )Merge remote...。对于我们想要折叠到最顶层提交的那些提交,更改
pick为:squashpick如有必要,更改新提交的消息。
之后我们有:
那些。“胶合”
commit2和commit3,commit4和commit5.推送这些更改
remote仅适用于-force标志。您需要将整个历史记录从第一个合并提交到最后一个可用的提交(包括)重新定位到作为第一个合并提交的祖先的相同提交。
在 rebase 过程中,可以合并部分提交,例如,以交互方式。
一些 git 的 gui 包装器(例如 TortoiseGit)允许您自动执行此过程,但仍将通过 git rebase 完成
如果提交的历史很深,则没有正常的方法可以做到这一点。Rebase 将强制您重新解决所有合并提交冲突。
因此,我编写了自己的实用程序,允许您自动执行此操作:https ://github.com/lokha/git-recreator