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
相关推荐
howard20054 小时前
6.4 Git安装与配置
git·安装配置
tryCbest7 小时前
git实现前后端分离项目提交同一个仓库
git·gitee
Mr.朱鹏8 小时前
Git 仓库同时推送到 Gitee 与 GitHub 配置指南
git·gitee·开源·github
Flynt1 天前
HN 382分热文里的终端小技巧,我实测了一遍,git pickaxe 最值
git·命令行
横木沉1 天前
IntelliJ IDEA 无法识别 Git:Git is not installed 问题解决
java·git·github·intellij-idea
为你学会写情书1 天前
Git 学习指南:从日常命令到多人协作与提交规范
git
东小黑1 天前
Git 仓库操作与 VSCode 使用指南
git·vscode·gitee
拼图2092 天前
Git常用语法
分布式·git·学习
ShineWinsu2 天前
对于Git:基础操作的超详细保姆级解析
linux·c++·git·面试·备份·管理·版本控制器
沉迷...2 天前
Git skip-worktree 使用笔记(本地忽略配置文件)
javascript·git