git合并commit操作流程(合并本地的commit+合并git服务器commit) ----git小技巧

717 阅读4分钟

在我们团队开发过程中,我们通常会建立个分支,开发好功能了再进行push和分支合并,但是这样有个问题,就是会有很多的commit记录,阅读审查比较不方便,这时我们就可以用到本次讲到的小技巧进行本地合并commit啦

在第二大节中,还给大家补充了合并给i他服务器commit记录的方法哦(gitee、gitlab、github)

一、本地合并commit(commit了但没有push的情况)

1. 使用下面这条命令,打印最近的commmit信息并打印成一行 ,不要--oneline就是打印完整信息带hash码的

git log --oneline

image.png

2.选择开始合并commit的头位置,如果直接从头开始合并,就使用如下命令:

git rebase -i HEAD~3

这里的3是指需要合并多少条commit,根据个人需求修改,需要注意的是,如果head后输入了5,就得改5个pick,接下来会出现下图 image.png 当然也可以复制​git log --oneline后,上面显示的7位哈希码作为开头,把head~xxx改为哈希码,输入如下命令

git rebase -i e304c35

3.回车后,单击i键进入编辑模式,顶部每行就是一条commit并且每条commit的备注也会在后面显示出来,然后我们把需要合并起来的commit行的pick改成s,就像这样:

image.png

4.接下来,单击esc,输入:x(冒号加X),记住一定得是:x,不能:wq,然后等待执行后,在输入​git log --oneline就可以看到commit被合并了,这时候如果有冲突的文件就会进入冲突合并模式,如下图

image.png

图里的4/4表示你合并的4个commit里的第四个有冲突,需要自行到编辑器里进行合并冲突操作,合并好了暂存更改了,返回git命令行工具,输入

git rebase --continue或者git rebase --continue --skip

前者表示已经合并冲突代码了,保存好了,可以开始处理下一条commit了。后者表示跳过这条commit,不要这个commit的功能了,也就不用合并这条commit的冲突了(如果有冲突的话),如果看到冲突了不想合并了就输入git rebase --abort撤销一下就会取消刚才的合并commit操作了。

5.当所有的冲突合并好了以后,就可以直接git push 把本地代码推送到远程了

二、合并服务器commit(gitee/gitlab/github等)

有时候我们已经把提交记录push到git服务器了,这时候我们应该怎么合并commit呢?接下来就给大家讲一下叭~

1.首先,把git服务器的最新代码拉到本地来,确保本地是最新版本,并且在你合并的过程中,git服务器最好不要更新代码哦,为了避免冲突和最新提交的commit被覆盖掉。

2.代码拉到本地后,就进行合并本地commit的操作,这个操作流程和上述(一)中的合并本地commit流程一致。

3.把本地commit合并好了之后最重要的来啦,这时候就要把本地的push到git服务器当中了,这时候如果我们用常规的git push直接把代码推上去就会报错提示你需要先pull再push,这时候你要是pull了的话之前(一)的操作就白费了,因为虽然本地合并了commit,但是git服务器没有合并,这时候去拉代码,本地已经合并了的git树就会被服务端的未合并的git树覆盖,pull了之后就是报错,然后就是一个一个commit的mergeing,这种操作实在是太繁琐了。

这时候,我们就不能直接使用git push,而是使用git push -f,这里的-f,就是force的意思,强制更新,强制git服务器按照你push上去的git树更新,不需要pull了之后合并最新代码再push,这就是我之前说的为什么在你进行合并服务端commit的时候别的同事不能进行代码push,因为会被你的git push -f的强制更新给覆盖掉。

这就是我在踩坑合并commit之后总结出来的一点点心得啦,肯定还有很多不足的地方,希望大家发现了评论区留言我们一起讨论哦~