git提交拆分问题以及分批推送

问题:

本地master有100个提交未推送到远程master上,一次推送100个提交到gitlab上会报错,所以只能分次提交,但是第60次提交数据大(可能),需要分成2个新提交

解决方法

方法一:

将 Git 全局的 HTTP 推送数据缓冲区大小设置为 524288000 字节(即 500 MB)

shell 复制代码
git config --global http.postBuffer 524288000

注意事项:

如果你推送的文件大小超过了 Git 服务器(如 GitHub、GitLab、Gitee 等)的限制,依然会推送失败

方法二:

第一步:拆分第60次提交

1. 先备份
shell 复制代码
git branch backup-master

如果后续操作搞砸了,你可以随时用 git reset --hard backup-master 恢复到原始状态。

2. 启动交互式变基
shell 复制代码
git rebase -i 19fa4877280e8c6f15805576e1b79e388363a892
注意: 这个哈希值是有问题提交的父提交

例如:想拆分第2次提交,那么这个哈希值就是第1次提交的

这会打开一个文本编辑器,列出了从第2次提交到最后一次所有的提交

在编辑器中,找到第2次提交(注意:由于排列顺序,它大概在列表偏上的位置)。将该行前面的 pick 修改为 edit(或简写为 e):

txt 复制代码
edit f7g8h9i 第2次提交  <-- 把这里的 pick 改成 edit
...
pick e3a1b35 第4次提交
pick a1b2c3d 第5次提交

保存并退出编辑器。Git 会开始执行变基,并在第2次提交处暂停,提示你进行修改

3. 拆分提交

此时,你的工作区停留在第2次提交刚完成的状态。我们需要把这次提交撤销,但保留文件修改,然后分两次重新提交:

a. 回退本次提交,将修改放回工作区:
shell 复制代码
git reset HEAD^

(注意:不要加 --hard,加了会丢失代码修改。此时代码修改会变成"未暂存"状态)

b. 挑选第一批需要提交的文件或代码行:

如果你可以按文件拆分:

sh 复制代码
  git add file1.py file2.py  # 添加属于第一个新提交的文件

如果在同一个文件中,你需要拆分具体的代码行:

sh 复制代码
  git add -p file3.py  # 交互式选择,Git 会逐块询问你是否暂存,输入 y 暂存,n 跳过

c. 创建第一个新提交:

sh 复制代码
git commit -m "第2次提交 - Part 1"

d. 将剩余的修改添加到暂存区并创建第二个新提交:

sh 复制代码
git add .
git commit -m "第2次提交 - Part 2"
4. 继续变基

拆分完成后,让 Git 继续执行剩余的变基过程:

sh 复制代码
git rebase --continue

注意:(如果遇到冲突,解决冲突后执行 git add . 然后 git rebase --continue 即可。)

第二步:分批推送到远程

1. 推送前50个提交

你可以使用本地分支的某个历史提交来指定推送范围。查看前50个提交的哈希值(即当前 HEAD 往前数第51个提交):

假设得到的哈希值是 abcd123,我们将远程 master 快进合并到这个提交:

sh 复制代码
git push origin abcd123:refs/heads/master

这个命令的意思是:把本地 abcd123 这个提交推送到远程的 master 分支。因为它是当前提交的祖先,所以远程会接受,此时远程拥有了前50个提交。

2. 推送剩余的提交

现在远程已经有了前50个提交的基础,你可以直接把本地剩下的提交推上去:

sh 复制代码
git push origin master
相关推荐
恋喵大鲤鱼3 分钟前
git merge
git·git merge
码客日记37 分钟前
Spring Boot 配置文件敏感信息加密(Jasypt 企业级完整方案)
java·spring boot·git
_codemonster1 小时前
Codex 核心进阶玩法(技能/MCP/派生/分叉/Git/钩子/子智能体)
git
逻极1 小时前
Git 从入门到精通:版本控制协作实战指南
git·github·分支管理·版本控制
恋喵大鲤鱼1 小时前
git clean
git·git clean
Patrick_Wilson2 小时前
为省一次回归测试,该不该把多个改动堆进一条分支?
git·ci/cd·架构
恋喵大鲤鱼2 小时前
git blame
git·git blame
yeflx2 小时前
Git操作
git
恋喵大鲤鱼2 小时前
git pull
git·git pull
咖啡星人k3 小时前
MonkeyCode 的 Git 集成:AI编程如何与版本控制无缝协作
git·ai编程·monkeycode