使用git指令 将多次commit合并成一次

本文详细介绍了如何使用Git将多次提交合并为一次,包括使用git rebase -i指令的具体步骤,以及解决过程中可能出现的问题,如冲突处理和Vim编辑器的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、可以先查看工作目录当前状态 git status(有多种状态,先说一种不需要自该的状态:

   

2.git  commit 提交 

(注意:然后进入一个界面,这个页面是用来填写填写描述信息的,在初始状态下,不能编辑这个文件,需要按一下小写“i”来切换到插入模式,输入完成后不要按回车,按esc键,返回命令模式,连续输入两个大写“Z”,就保存并退出了)

3、查看提交状态 git log,(按q退出)

这样就会显示你在develop之前有几次提交,然后接下来我们就要将多次commit合并成一次

4.git rebase  -i origin develop

会出现编辑窗口,把除第一个以外的pick改为s或者f(此处为简写,可以看编辑窗对各自的定义)

(这个截图非本项目的,只是名字不一样,但是操作都是一样的)

然后修改一下提交的描述即可

5.指令执行完以后可以 在git log  检查一下 成功的话会在develop上面显示一次commit

6、最后一定要git push -f  一下,强制远程上面吧commit次数更改为一次

 

7、备注:

如果在终端出现的页面不能编辑,需要按下小写字母 “ i ” 切换到输入模式;

如果是在下方终端直接出现的编辑器页面 就可以直接在编辑器页面编辑 这样就要用到Vim/Vi模式

在下出现 --INSERT-- 代表的是输入模式

将光标放在需要修改的2~以下的 操作和@1是一样的,然后要保存 这里的保存是Vi的保存方法

按下 Esc 这个按钮即可!马上你就会发现画面左下角的 – INSERT – 不见了!这样就转换成了一般模式

在一般模式中按下 :wq 储存后离开 vi( :wq的原理——>在命令模式下按下:(英文冒号)就进入了底线命令模式。

  • q 退出程序
  • w 保存文件

按ESC键可随时退出底线命令模式。)

在此合并commit的过程中可能还会到  git   add . 

 git add .   提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件

二。另一种指令:、

比如你有三次提交

那就可以利用指令 git rebase -i HEAD~3

在多次合并成一次的时候  有时候是不允许你合并成一次的,比如:

(1)你在合并的时候有冲突,然后你解决冲突有提交了一次,这样就会保持2次提交,合并不成一次

(2)你merge过父分支。又解决过冲突,这样应该是保持3次提交。

 

 

 

### 使用 `git rebase` 合并多个提交 当希望将一系列提交压缩单个提交时,可以采用交互式的变基命令。通过执行 `git rebase -i HEAD~n` (其中 n 是想要回溯的提交数量),会打开一个编辑器显示最近几次提交的信息列表[^1]。 在这个文件里,可以通过更改关键字来指定操作方式: - 把除了最顶部之外的所有条目前的单词改为`squash`(简称s),这表示这些提交将会被合并到上面的一个提交中; - 修改完后保存退出,随后Git会让用户重新编写新的提交信息; ```bash $ git rebase -i HEAD~7 ``` 此时会出现如下界面(假设我们有七个待处理的提交): ```text pick abcdefg 提交消息1 squash hijklmn 提交消息2 squash opqrstu 提交消息3 ... ``` 之后编辑器再次弹出用于输入最终版本的日志描述[^2] --- ### 利用 `git reset` 实现相同效果 另一种方案涉及重置暂存区至特定历史节点,并一次性添加所有改动作为全新的一次提交。具体步骤如下所示: 首先找到目标分支上最早的那次提交ID(哈希值),接着运行下面两条指令整个过程: ```bash $ git reset --soft <最早的那个commit id> $ git commit -m "汇总后的单一提交" ``` 这种方式同样能够达到把多笔记录合一笔的效果,不过需要注意的是它改变了项目的历史线性结构,在公共仓库协作场景下需谨慎行事. --- ### 应用 `merge --squash` 进行跨分支整合 对于不同分支间的变更累积为一次性的提交而言,则可借助于`git merge --squash`选项达目的。此法适用于准备向主干引入某个特性/修复分支全部更新而不保留其内部演进细节的情况。 创建一个新的临时工作分支基于即将接收变动的目标分支之上,然后利用上述参数实施融合动作即可实现预期功能[^3]: ```bash $ git checkout -b temp_branch mainline_branch $ git merge --squash feature_branch $ git commit -m "Aggregated changes from feature branch." ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值