我定期将本地 Git 存储库中的提交上传到 GitHub,但是提交过多,在确定它们没有用处并且只会破坏历史之后,我尝试使用rebase -i
将一些提交压缩在一起。
它似乎有效,所以我想将更改的提交推送到 GitHub 并更改那里的历史记录。我得到的是我当前分支的尖端落后了。建议的操作是从远程仓库中提取更改,但我不希望从远程进行更改。我只想将我在本地拥有的内容发送到 GitHub。
你能解释一下我的情况并帮助实现我想要的吗?
我定期将本地 Git 存储库中的提交上传到 GitHub,但是提交过多,在确定它们没有用处并且只会破坏历史之后,我尝试使用rebase -i
将一些提交压缩在一起。
它似乎有效,所以我想将更改的提交推送到 GitHub 并更改那里的历史记录。我得到的是我当前分支的尖端落后了。建议的操作是从远程仓库中提取更改,但我不希望从远程进行更改。我只想将我在本地拥有的内容发送到 GitHub。
你能解释一下我的情况并帮助实现我想要的吗?
编辑一些推送的分支是不行的,但是你可以做到。
也许您的提交日志如下所示:
o 250a32c added new information <master> <origin/master>
|
o c4f5265 added new information
|
o 168d674 added new information
|
o ca708cd some other commit
您现在可以使用交互式 rebase squash 一些提交。
git rebase -i ca708cd
将打开一个编辑器,您可以将pick
提交之前的250a32c
和更改c4f5265
为squash
.
在此之后,您的 repo 如下所示:
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
现在您必须使用 将您的分支推送到 github --force
,因为您的 master 和 master/origin 不同步并且无法快速转发。
git push --force origin master
在公开发布提交后重写历史记录并不是一件好事。想象一下其他人克隆了您的存储库。如果您之后更改它,他们的历史将与他们的起源(您的 github 存储库)不匹配。
您有几种解决方案,您可以:
尝试继续更改 github 上的 repo。一种可能性是在 github 上完全丢弃您不喜欢的分支,然后将您安排的本地分支推送到 github(silvio 的“--force”是一种更快的选择)。
完全删除 repo 并再次将本地 repo 克隆到 github。
忍受不那么漂亮的提交(首选解决方案)。