常用指令:
查看A文件是谁最近修改的:git log A (会打印出commit号)
查看某条具体提交修改的内容:git show commit号
查看当前文件某一行是谁修改的:git blame 文件名
回退本地代码到哪一笔提交之前:git reset --hard commit号
回退代码的方法:
对于一个Git库,回退到服务器,则使用:
- Git log
- Git checkout 6b78a8536fdcc25c20778b4fa8c4c301e096bc2f
或者
git reset --hard 6561422e8c406631230c1179a56454bc43c2c57b
表示该节点之后的都被回退掉了
一、初始化代码库
1、mkdir 文件目录,例如:mkdir project_N8
2、cd 文件目录,例如:cd project_N8
3、拉项目代码
①、repo init初始化repo当前目录
拉整个项目代码
repo init -u URL –b 分支 –m xml文件,例如:repo init -u ssh://192.168.10.18:29400/MTK6750/manifest -b master -m N8_L1_IOS.xml。 (注此时的分支应该是远程库的分支,可以用git branch –a查看当前所有分支)
拉一个具体的git库下来:比如拉一个vendor目录:
git clone ssh://192.168.10.18:29400/MTK6750/vendor/mediatek/proprietary/custom
然后切换到对应分支:git checkout N8_L1_IOS.xml (绿色的部分和repo init的一样)
[如果只拉某一个文件,即git库,则就下一步不需要repo sync了,直接进入对应生成的目录------执行git branch –a------check到对应的分支:git checkout 分支名]
注意:git clone不太好,他表示把远程分支克隆一个下来,如果用这中方式拉取到本地的代码,在提交代码的时候,会被有commit id号,导致无法上库
正常同步一个git库下来,可以用一下方式:
1、依然是repo init
repo init -u ssh://192.168.10.18:29400/MTK6750/manifest -b master -m N8_L1_IOS.xml
2、在 ls .repo/manifests中查看分支/仓、一个git库名称
3.直接使用repo sync -j16 库路径:比如kernel/msm5.10
②、repo sync,同步代码到本地
【若是在主目录里新建文件,需要SCM的人提交,我们提交没权限,等他们加好了,我们再更新本地库就好了,只是repo sync不行,要么重新拉代码,要么删除build文件夹里的makefile: rm -rf Makefile,可以直接删除build文件夹,执行repo sync build -cj4命令即可】
- repo sync –cj16 “c表示更新当前分支即可”
- make ptgen –j16 “ptgen”表示让当前修改也立即生效,否则当前修改无效
二、创建本地开发分支
查看当前分支:Git branch -a
//若自己就不在分支上,或者所在分支不对,则查看分支
ls .repo/manifests
repo init -m H970_native.xml 切换到这个分支
repo sync 重新同步
- repo start 分支 --all 切分支命令
- 切完后查看一下是否ok: git branch,查看当前分支情况 (branch 分支的意思)
三、修改代码并提交
- cd 文件路径,例如:cd packages/apps/Settings
- git status,查看有哪些修改文件.
- git add 文件路径,例如:git add src/com/android/settings/Settings.java(注:这个路径就是所修改文件的路径,即由git status命令获得的)
快捷方式:git add . (点)可以一次性提交很多对应目录下的修改文件。
注意1:提交删除的文件:git rm 文件路径
注意2:添加并不等于提交,提交是git commit –m “注释”
4. git status,查看文件是否添加正确 (修改文件路径有红色变成绿色)
5. git commit –m “注释”,例如:git commit –m “xxx xxx”
(commit向本地版本库提交代码的命令,-m选项是添加提交注释,如果添加了,可以在版本历史中看到。)
当自己写的git commit报错时,修改格式:
1类问题:git config --global core.editor vim
二类问题:git commit --amend命令是当该文将刚刚提交到服务器而并没有merged,此时再补充修改
把git commit -m "BUG ID:none DESCRIPTION:添加cxlite B_BOM 配置"
改成:
git commit --amend "BUG ID:none DESCRIPTION:添加cxlite B_BOM 配置"
- 如果删除的代码很多,则先用命令git add --all (git add .) 然后用命令git commit -am "BUG ID:none DESCRIPTION:xxx" -am表示add and move
如果用命令git rm 的话就要一句一句的提交,该命令不好。
git commit -am "BUG ID:none DESCRIPTION:过modem checklist"
6、git checkout 文件路径,还原无需提交的修改文件,例如:git checkout src/com/android/settings/ActivityPicker.java
若有很多,则用:git checkout - 即:回退所有
在没有提交到本地库之前执行此命令的话,即在git add和git commit –m执行之前,则自己修改的代码就不会被保存<可以用git diff查看一下>;在提交到本地库之后执行此命令的话,即把自己修改的代码添加到文件中,让自己目前的代码和本地库上的代码一样。相当于保存更新了一下。
[自己添加1:当修改代码太多时要repo syncs 时会出现错误,这时可以用两条代码回退回来,git config --global alias.unstage 'reset HEAD --'
git config --global alias.restore 'checkout --' ,
这两条是宏定义,即把一个长的命令变短。执行它们之后我们才可以执行后面的命令,执行完后就自动添加到了~目录的.gitconfig文件里。
具体执行命令:git unstage * 还原当前目录已经commit后的代码, git restore * 还原当前目录修改过的,用命令git status查看变为红色的代码,都可以被还原,即在执行commit之前的代码]
【自己添加2:git clean -fd;git reset --hard;git pull --rebase 一起执行,返回自己还没有提交的修改代码{ git clean -fd 删除生成的多余文件;git reset --hard 还原其它修改的内容;git pull --rebase 同步更新代码,以防别人刚才又合入新的patch}】
如果commit之后的话,直接git reset –hard不可以,要按以下命令。
Git log
git reset --hard 6561422e8c406631230c1179a56454bc43c2c57b
表示该节点之后的都被回退掉了。
【******提交报错时:自己添加3:回退已经commit的代码:git commit --amend 进去之后保存正确的格式,保存:ctrl+x 退出:enter.然后在git push
详情请看邮件,转发: 关于研发团队git提交commit message规范格式正式上线使用的通知】
跟大家分享个今天碰到的git commit --amend修补提交用法,当有两笔提交的时候,一般运行git commit --amend的时候修改的是最近一笔提交的信息;而你想修改第一笔提交的信息,这时候你需要运行指令:git reset --soft commit_id; 其中commit_id为你git log查看到的commit记录,之后你再git commit --amend修改的就是你指定的第一笔提交的信息了。
7. git pull --rebase,更新本地当前节点至最新节点(拉直节点线),避免代码merge时冲突,若rebase失败,请参考第五步 (rebase重定基底的意思)
【更新本地代码:连同自己的修改也改变git reset --hard HEAD~~】
同事给的:repo forall -c git reset –hard 可以在主目录执行
回退已经提交到服务器上的代码,而且本地修改还在:
git reset --mixed HEAD^
四、提交至远程gerrit库
git push origin HEAD:refs/for/远程分支名,或cd 至代码库根目录(HIOS_C8)【可以不用到根目录】,然后repo upload . ,例如:git push origin HEAD:refs/for/master 或 cd 到项目跟目录repo upload .
五、解决rebase时文件冲突导致merge失败问题
- git status,查看哪些文件有变动.
-
git diff “变动文件”(这是可以查看到修改的具体代码)
-
vi “变动文件”,或者其他方式打开变动文件,手动修改冲突的地方,并保存
- git add “变动文件”
- git rebase –continue 更新本地当前节点至最新节点
- 完成后,参考第四步提交 继续提交
六、如何查看分支信息:
(1)首先是明晰提交分支,有以下两种方式获悉:
1、查看.repo/manifest.xml文件中的revision字段
2、查看本地库.git/config文件下的分支merge选项字段
(2)之后的操作和单git库修改代码、提交、push方法是一致的,只是要在单独的git库下使用git命令,可用repo list查看哪些目录是git库,也可查询.repo/manifest.xml文件,path字段代表的目录即为git仓库
git pull --rebase #代码修改前获取最新代码(--rebase 避免服务器产生过多的合并分支)
git add changefile #添加 修改过的文件,git status 可查看工作区代码修改状态
git commit #按照信息模板填写提交信息。不能使用git commit -m 命令
git pull --rebase #如上
git push origin HEAD:refs/for/master #分支名根据实际情况,把master替换成对应的分支名