初次使用git/repo,将一些工作常用的命令记录下来,以供以后参考:
The different between git and repo:
git 操作一般对应一个仓库,而repo操作对应一般于一个project,一个project会有若干个仓库组成。
在操作整个project时使用repo,而在操作其中某个库时使用git。
一. repo常用的命令
repo是google开发的一个python脚本(其中调用git命令)
repo可以通过官网下载http://android.git.kernel.org/repo
1.repo init
在当前目录创建一个repository,会在当前目录生成一个.repo目录
-u 指定一个URL,从这个URL中获取repository的manifest文件。
-m 指定manifest
-b 指定某个manifest分支
$repo init -u XXX -b XXX -m XXX
2.repo sync
同步所有文件,更新到最新
第一次运行,相当运行git clone,会把repository所有的内容copy到本地.
第二次运行,相当git remote update
git rebase origin/branch
repo sync 会更新 .repo 下面的文件
3. repo start --all XXX /repo abandon XXX
在文件夹下所有的git库都建立一个分支/
在文件夹下所有的git库删除一个分支
(若是使用该命令来创建分支,提交patch可以通过repo upload命令)
二. git常用的命令
1.创建一个本地分支
$git branch //查看本地所有分支,带*表示在该分支上
$git branch -a //查看所有分支,包括remote服务器分支
$git checkout XXbranch_name_in_serverXX -b XXbranch_nameXX
//将服务器上的XXbranch_name_in_serverXX分支checkout到本地XXbranch_nameXX分支上
(XXbranch_nameXX同时已被创建)
2.查看当前分支上所有的提交
$git log
3.删除一个本地分支(不能删除当前所在的分支)
$git branch -D X
可以通过$git branch查看是否被删除
4.切换本地分支
$git checkout X //X为branch name
可以通过$git branch来查看当前所在分支
5.查看本地的修改
$git status
6.查看本地修改和本地服务器的不同
$git diff
7.commit本地修改的文件到本地服务器上
$git commit -s -a
通过$git log看看是否已经将本地修改上传到本地的服务器上
$git commit --amend //修改commit信息
8.生成patch
$git format-patch HEAD^ //其中^的个数代表patch的个数
9.可以将分支切回到某个版本
$git reset --hard XXX //其中XXX为commit号
$git reset XXX//切回到XXX版本,本地保留修改
10.打patch
(1)If has 00XXX.patch file(这个是由git format-patch生成的patch)
$git am 00XX.patch //将本地代码修改,并commit,是否可以打上这个patch,通过$git log就可以看到有修改
$git apply XX.patch //将本地代码修改,没有commit,是否可以打上这个patch,通过$git status可以看到
If use "git am" has conflict,we can fix the conflict,method as follow:
$git apply --reject 00XXX.patch
可以先将没有conflict的文件先merge,剩下的conflict做了标记,并生成XXX.rej文件,
文件里是因为conflict无法合并的code片段.在这段代码查找冲突,并修改,XXX,rej参考完后,删除.
$git add .
$git am --resolved
(2)如果是别人提交的patch是在gerrit上,没有00XXX.patch文件
在gerrit上使用cherry-pick下的命令行
若有conflict,首先记下冲突版本号(部分即可)
$git status会显示哪个文件有conflict
$git diff有"<<<" "HEAD"标识的就是冲突的地方
解决冲突
$git add
$git commit -c 冲突版本号
要使用git push上传到gerrit,不能使用repo upload
About git push:
$vi .git/config
push = refs/heads/XXbranch_nameXX:refs/for/XXbranch_nameXX
11.更新该分支
$git pull