一次代码合并事故

前几天做了一次git分支合并操作,昨天同事发现有几次提交没有合并上,今天上班发现真的是合并掉了。由于没在旧分支上提交过代码,当时合并好后让同事确认有没有漏掉的提交,他说没法一一检查,后来想想,其实有办法可以确认提交的代码,在此记录下以示警示。
分支合并的基本操作是,假如要把develop分支的代码合并到master上,先切换到master:

git checkout master

然后开始merge:

git merge origin/develop

解决冲突,再git add,git commit,git push。但当时操作的时候忘了一件事,merge前,要先把最新代码拉下来,保证两个分支的代码都是最新的。
每次进行分支操作后,借助gitk可以很方便的查看合并情况:

gitk

先上个图:
这里写图片描述
这是在1.7.8.5分支上,同步到最新代码的情况:下面蓝色背景那次提交是当时我合并的提交,上面的那次merge是昨天晚上发现合掉了后的第二次合并;再对比web端的分支提交情况就知道,旧分支上的代码是否有漏掉的。(其实不会漏掉,只要确认旧分支的代码是最新的就行了)

顺便附上使用git的一些基本命令:

git commit --amend:修改上次commit
git cherry-pick  Patchset :把某次提交,可以是任意分支,提交到当前分支,patchset可以从web端查看:

这里写图片描述

git fetch:如果有新增的分支,同步服务器端新分支到本地。

git checkout xxx(branch):分支切换,如果当前修改没有commit需要先commit。

git checkout xxx(file):取消xxx文件的改动,使其回到上一次commit时状态。

git checkout .:取消代码改动,回到上次commit时的状态,无法取消新增的文件。

git clean -f:如果添加了一些文件,提交的时候删除这些新增的文件。

git diff origin/master HEAD:已经commit后,查看当前代码和commit之前的改动。

git log -n 1 --stat:显示最近一次提交改动的文件。

git log -n 1 -p:查看最近一次提交改动的文件内容。

git merge origin/xxx(branch):合并xxx分支代码到当前分支,切记先把两边代码pull到本地啊!!!

另外,解决冲突的时候,git会提示,解决完了用:

git rebase --continue

如果不想合并了,退出使用:

git rebase --abort

有时push的时候会提示push失败,也看不出原因,尝试:

git commit --amend

然后删除change id那一行,保存退出,git会重新生成一个change id,再次push就可以了。

2017.11.8补充:
一次误操作,提交代码的时候使用了git commit –amend,这样changeID就和上一次提交是一样的,然后又commit了一次,导致本地有两个commit,并且第一个commit和服务器已经合并的commitID是一样的:

commit 1(第一次commit,通过commit –amend生成的,和服务器上的changeID一样)

commit2 (第二次commit,通过commit生成的,新的changeID)

这样在push的时候会报错:
这里写图片描述
解决办法是合并这两个commit:

git rebase -i HEAD~2

会列出最近两次commit:
这里写图片描述
上面的是第一次commit,把它删了,只留下第二个,然后ecs + : + wq 保存退出,会只有一个commit,此时可以修改commit信息:
这里写图片描述
再次保存退出,就可以提交了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值