Git rebase将当前分支留在远程,需要更清晰的提交历史记录

时间:2013-09-04 08:22:30

标签: git github git-rebase

我定期将我的本地Git仓库的提交上传到GitHub,但是它被提交过载,在决定它们没有用并且破坏了历史后,我尝试使用rebase -i来压缩一些提交。

它似乎工作,所以我想将更改的提交推送到GitHub并更改其中的历史记录。我得到的是我当前分支的提示落后。建议的操作是从远程仓库中提取更改,但我不希望远程更改。我只想将我在本地发送给GitHub。

请您解释一下情况并帮助实现我想要的目标吗?

2 个答案:

答案 0 :(得分:3)

要编辑某些推送的分支是不行的,但是你可以这样做。

也许您的提交日志如下所示:

o 250a32c added new information <master> <origin/master>
|
o c4f5265 added new information
|
o 168d674 added new information
|
o ca708cd some other commit

现在您可以使用交互式rebase压缩一些提交。

git rebase -i ca708cd

打开一个编辑器,您可以在提交pick250a32c之前更改c4f5265squash

在此之后,你的回购看起来像这样:

o 3e86bc4 added new information <master>
| o 250a32c added new information <origin/master>
| |
| o c4f5265 added new information
| |
| o 168d674 added new information
|/
o ca708cd some other commit

现在您需要使用--force将分支推送到github,因为您的主服务器和主服务器/源服务器不同步且无法快速转发。

git push --force origin master

答案 1 :(得分:1)

在公开发布提交后重写历史记录并不是一件好事。想象一下,其他人克隆了您的存储库。如果您之后更改它们,它们的历史记录将与它们的原点(您的github repo)不匹配。

您有多种解决方案,您可以:

  • 尝试继续更改github上的repo。一种可能性是完全丢弃你在github上不喜欢的分支,然后将你安排好的本地分支机构推送到github(silvio&#39; s&#34; - force&#34;是一个更快的替代方案)。 / p>

  • 完全删除repo并再次将本地repo克隆到github。

  • 与不那么漂亮的提交(首选解决方案)一起生活。