已经提交到远程的两个commit如何合并为一个提交

问题:

wifi_control分支的代码我想将最近的8d5d5e035a234c31704fa3e77ca4046ded59050f和86b079c3b7d4e68341066cde2e6ffc00b937fad1的提交合并,统一用86b079c3b7d4e68341066cde2e6ffc00b937fad1的commit

 

1.先确认当前分支和提交历史:

 
git status --short --branch git log --oneline --decorate -n 20

看到当前在 xyc_reapply_wifi_control,并且最顶上的两笔就是:

 
8d5d5e0 <NEW>:提高wifi控制的速度
86b079c <NEW>:wifi控制相关代码
ff22ef4 ...
 

2.因为这两笔都在分支最前面,所以用 soft reset 回到它们之前的基点 ff22ef4:

 
git reset --soft ff22ef4

这一步的效果是:撤销这两个 commit,但保留它们的所有代码改动,并且保持在暂存区。

 

3.然后用 86b079c 的提交信息重新提交:

 
git commit -C 86b079c3b7d4e68341066cde2e6ffc00b937fad1

-C 的意思是复用这个旧提交的 commit message、author、author date 等信息。

最终生成的新提交是:

 
8965f5d <NEW>:增加protcol层wifi控制相关代码,便于app设置wifi状态、wifi账号和密码

这里有个 Git 机制点:commit hash 是由内容、父提交、作者时间、提交信息等一起算出来的,所以两笔提交合并后,hash 一定会变,不能继续保持原来的 86b079c...。

我这里做到的是“统一使用 86b079c 的提交信息”,不是保留原 hash。

现在远端还保留原来的两笔提交,本地是合并后的一笔,所以后续如果要更新远端,需要:

 
git push --force-with-lease origin wifi_control

 

posted @ 2026-05-28 18:36  bk街头狂舞  阅读(6)  评论(0)    收藏  举报