4

我有一个看起来像的日志

c2ba4f3cfd3e8b29e634b41d7178ffe38f8c9f0a版本0.1 d825b48fe86107c3842f62c9e9bc5f290a2c2475 TEST2 0a06037c3c29a0c9446707e884d9b2777336db59测试c7453d959fc86d2868076b3900e0fd1ed63e2709开始

所有内容都已推送到我的原始服务器,但我想以这样一种方式合并提交,看起来我所做的唯一一个就是带有评论的那个version 0.1。当我推送它时,服务器必须反映提交合并。

简而言之,我希望存储库有一个包含我命名的内容的单一提交。

我整天都在尝试变基,但未能获得预期的结果。我怎样才能做到这一点?

4

2 回答 2

4

强制性警告:更改已推送到远程存储库的历史记录对于使用该存储库的其他人来说可能是一个巨大的头痛。

交互式变基将带您到达那里。

# start an interactive rebase onto the parent (~) of 'begin'
git rebase -i c7453d9~

交互式 rebase 会将您弹出到如下所示的编辑器中:

pick c7453d9 begin
pick 0a06037 test
pick d825b48 test2
pick c2ba4f3 version 0.1

如果您想保留所有提交中的所有更改但使它们看起来像一个提交,请将其更改为:

reword c7453d9 begin
fixup 0a06037 test
fixup d825b48 test2
fixup c2ba4f3 version 0.1

reword将提示您更改提交消息(将其更改为“版本 0.1”),并将fixup从提交中提取所有内容到上一个提交中。最终结果将是一个包含所有四个内容的提交。

完成同样事情的另一种方法:

pick c7453d9 begin
fixup 0a06037 test
fixup d825b48 test2
squash c2ba4f3 version 0.1

squash将提交的内容拉入上一个提交,但允许您更改提交消息(在本例中为“版本 0.1”)。

如果您想完全放弃前三个提交的更改并只保留最后一个提交的更改,请将 rebase 行更改为:

pick c2ba4f3 version 0.1

本质上,删除前三行。最终结果将只是“版本 0.1”提交,没有来自先前提交的任何内容。

修改历史记录后,您需要使用--force.

于 2012-08-23T02:21:33.960 回答
0

您可以删除其间的提交。

git reset --mixed c7453d9
git checkout c2ba4f3cf -- .
git add -A
git commit -C c2ba4f3cf
于 2012-08-23T01:30:28.900 回答