Github上如何合并多个Commit
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Github上如何合并多个Commit相关的知识,希望对你有一定的参考价值。
在Github浏览器版,能在一个安卓内核源码中看到,Commit里面有数十万条,而我希望提取某一功能,看到Commit里面有前缀,如图的功能intelli_plug,但是这个功能有30次改动,每次改动涉及的源码文件有多有少,只能一个一个去改动吗?可以用什么方法合并这些改动成一个patch,我知道单个Commit只要在Commit打开后,在后缀加上diff或patch就可以了,所以我觉得既然前缀一样,应该可以用什么命令合并这几十个改动的吧,请知道的朋友赐教!
在使用 Git 作为版本控制的时候,可能会由于各种各样的原因提交了许多临时的 commit,所以需要把多个Commit合并到一起,具体做法如下:
1、首先假设已经有3个 commit
2、需要将 2dfbc7e8 和 c4e858b5 合并成一个 commit,那么只要输入如下命令:
其中,-i 的参数是不需要合并的 commit 的 hash 值,这里指的是第一条 commit, 接着就进入到 vi 的编辑模式
3、可以看到其中分为两个部分,上方未注释的部分是填写要执行的指令,而下方注释的部分则是指令的提示说明。指令部分中由前方的命令名称、commit hash 和 commit message 组成。
当前只要知道 pick 和 squash 这两个命令即可。
pick 的意思是要会执行这个 commit
squash 的意思是这个 commit 会被合并到前一个commit
将 c4e858b5 这个 commit 前方的命令改成 squash 或 s,然后输入:wq以保存并退出。
4、这时会看到 commit message 的编辑界面
其中, 非注释部分就是两次的 commit message, 你要做的就是将这两个修改成新的 commit message。
5、输入wq保存并推出, 再次输入git log查看 commit 历史信息,就会发现这两个 commit 已经合并了。
参考技术A github 网页版功能不是很全的。你这个要求,我感觉,只能是靠对比两个不同的提交记录来获得总修改了。追问
请问shell版客户端如何操作?希望会的话指导一下,劳烦了。
追答忘了 git 的哪命令,可以输出两个commit 的 patch 。好像是 diff 参数就可以获得。
我这段时间基本只提交,不做修改比较了,真想不起来这个命令用什么了。
我有个偷懒的办法,下载两个 commit 的 zip 包,解压缩到不同的目录,之后用 diff 命令 -r 一下就行了。
git合并分支
1.主干合并分支
Git命令需要在主干下运行,命令执行后,分支的代码同步到了主干。
(1)在主干master上合并分支branch
(master) git merge branch --squash
--squash 选项的含义是:不提交、不移动HEAD,因此需要一条额外的commit命令。效果相当于将分支上的多个commit合并成一个,放在当前分支上,原来的commit历史则没有拿过来(前提是分支的commit历史不重要)。
(2)提交合并后的代码
(master) git commit -m "合并分支代码"
(3)将代码推送到远程仓库
(master) git push
2.分支合并主干
Git命令需要在分支下运行,执行后主干的代码同步到了分支。
(1)在分支branch上合并主干master
(branch) git merge master --squash
(2)提交合并后的代码
(branch) git commit -m "合并主干代码"
(3)将代码推送到远程仓库
(branch) git push
Git master branch has no upstream branch的解决
设置gitthub仓库地址:
git remote add origin https://github.com/...
解决办法其实就是确定这两个值,方法有两种:
第一种:git push --set-upstream origin master。其中的origin是你在clone远程代码时,git为你创建的指向这个远程代码库的标签,它指向repository。为了能清楚了解你要指向的repository,可以用命令git remote -v进行查看。master是你远程的branch,可以用git branch -a查看所有分支,远程分支是红色的部分。然后确定好这两个值后,将值换掉即可。
另一种方法是:git push -u origin master。同样根据自己的需要,替换origin和master。
两个命令的区别是第一条命令是要保证你的远程分支存在,如果不存在,也就无法进行关联。而第二条指令即使远程没有你要关联的分支,它也会自动创建一个出来,以实现关联。
以上是关于Github上如何合并多个Commit的主要内容,如果未能解决你的问题,请参考以下文章
github上测试服出现bug,如何回滚并获得合并之前的分支
如何限制谁可以合并到 github repo 上的 master?
如何在 GitHub Action 工作流程中推送或合并之前获取上一个提交?