Git常用命令:
配置全局的email和用户名:
git config --global user.email "ansen"
git config --global user.name "ansen360@126.com"
- git brach //查看分支情况
- git branch mybranch //创建分支
- git branch -a //查看所有分支
- git branch -r //查看远程分支
- git branch -v //查看各个分支最后一次提交
- git branch –merged //查看哪些分支合并入当前分支
- git branch –no-merged //查看哪些分支未合并入当前分支
- git branch -d mybranch //删除分支
- git branch -D mybranch //强制删除分支
- git branch test caf/test //创建并映射到远程分支
- git check 分支名 //切换到某个分支
- git checkout . // 撤销所有修改
- git checkout 文件路径 // 撤销该文件的修改
- git checkout -b mybranch //创建并切换分支
- git checkout -b mybranch origin/mybranch //基于远程分支创建新分支
- git cherry-pick 提交的哈希码 //合并提交
- git commit --amend //补充上一次提交的内容
- git pull //更新代码,从git服务器更新代码
- git pull --rebase //减少merge节点
- git push origin master //提交代码
- git push caf :test //删除远程分支
- git push origin hotfix:hotfix //提交代码到远程分支
- git push origin --delete hotfix //删除远程分支
- git push caf test //推送远程分支
- git clone git://github.com/xx/xx.git(从git服务器得到的) //从远程仓库拷贝代码到本地
- git status //查看代码修改状态
- git stash //暂存代码(保存现在的修改到暂存区)
- git stash list // 显示git栈内的所有备份
- git stash clear // 清除git栈
- git stash pop //从git栈中读取最近一次保存的内容(取出之后记录就不在list中)
- git stash apply //从git栈中读取最近一次保存的内容(取出之后记录就在list中)
- git fetch origin master(远程分支名称) //同步服务器代码到本地
- git reset 98222917718f2c80546b5bbd1718b6446df7b6c7 //回退到98222917718f2c8
- git reset --hard 477f4e4adcbcb6afa5f8707a0e6bc6c0e4b92e88 //回退到477f...本地内容也改变
- git reset --soft 477f4e4adcbcb6afa5f8707 //回退到某个版本,只回退了commit的信息
- git reset . //撤消git add
- git reset --hard HEAD 回滚到add之前的状态
- git reset --hard HEAD^^ //回滚前两个版本
- git reset HEAD^ //撤销最近一次提交(即退回到上一次版本)并本地保留代码
- git rebase origin/master //将fetch到的代码合并到当前分支
- git rebase --continue //继续rebase
- git rebase --abort //终止合并操作,恢复到rebase之前的状态
- git revert 4adcbcb //回滚到某次提交
- git rm -r res/drawable-xxx/xx/xx.xx //删除提交
- git reflog //查看引用日志
- git remote -v //查看远程仓库
- git remote update //更新每一个远程分支
- git remote add origin git://github.com/xxx //添加名称为origin的远程仓库
- git rm --cached file1 //删除文件跟踪但不删除文件系统中的文件file1
- git log --oneline
- git log xxx.java //查看文件的提交log
- git merge mybranch (将mybranch合并到当前所在分支) //合并分支
- gitk ./src/com/android/**/MSimCallFeaturesSubSetting.java //查看文件的修改记录
- git tag //查看版本
- git tag -r //查看远程版本
- git tag v1.4 //创建版本
- git tag -a v1.4 -m ‘version 1.4′ //创建带注释的标签
- git tag -d v1.4 //删除版本
- git push origin --tags //上传本地tag到远程仓库
- git format-patch -1 //单次提交
- git format-patch -3 // 从master往前3个提交的内容,可修改为你想要的数值
- git format-patch –n 07fe //-n指patch数,07fe对应提交的名称,某次提交(含)之前的几次提交
- git format-patch -s 4e16 // 某次提交以后的所有patch, --4e16指的是SHA1 ID
-
Samples:
-
提交操作:
$ git add .
$ git commit -m "clear"
$ git push origin master
- 获取远程分支
先fetch所有远程分支的信息;
远程分支映射到本地命名为local-branchname(和远程分支命名一致).
git checkout -b local-branchname origin/remote_branchname
- git仓库迁移,保存提交记录
project1 和 project2 为两个git仓库,将project1的代码及提交记录合并到project2中
1.进入project2文件夹,将project1添加为临时远程分支ansen
$ git remote add ansen ../project1/
2.获取远程分支ansen数据到本地
$ git fetch ansen
3.切换到临时分支ansen
$ git checkout -b ansen ansen/master
4.切回project2之前的master分支
$ git checkout master
5.将临时新分支合并到master分支:
$ git merge ansen
6、删除临时分支:
$ git branch -d ansen
- 创建本地分支推送到服务器
git branch develop
git push -u origin develop
- 修改完冲突后继续rebase:
git add . //把修改添加进分支
git rebase --continue //继续rebase
- 创建 git 仓库:
mkdir Git_Test
cd Git_Test
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin https://git.oschina.net/tomorrow_p/Git_Test.git
git push -u origin master
已有项目?
cd existing_git_repo
git remote add origin https://git.oschina.net/tomorrow_p/Git_Test.git
git push -u origin master
- 提交模板
1.在根目录建立模板文件: ansen_template
[CAUSE] :
[SOLUTION] :
[REVIEW] : Own
[SIDEEFFECT]: without side effects
[PROJECT] : V8
[CR] : SM-2182
[MODULAR] :
2.设置模板
git config commit.template [模板文件名] //这个命令只能设置当前分支的提交模板
git config --global commit.template [模板文件名] //这个命令能设置全局的提交模板
例如:git config commit.template xxx_template
git config --global commit.template /home/pansen/MSM8976/repo/ansen_template
3.设置文本编辑器
git config --global core.editor [编辑器名字]
例如:git config --global core.editor vi
4.使用模板提交代码
git commit 之后会以设置的编辑器打开模板文件,然后按照格式修改该文件,并保存
git push
git config --list
- GIT patch
1. 对某次提交生成patch:
git format-patch -1 [SHA1-ID] (不加SHA1-ID默认是最新那次提交)
例如: git format-patch -1 9c94cf7f08314a1f5d2b4bb5faaf9d2c2d6b4875
2. 应用patch:
先检查patch文件:# git apply --stat newpatch.patch
检查能否应用成功:# git apply --check newpatch.patch
打补丁:
# git am newpatch.patch (am会修改文件并创建提交)
# git apply newpatch.patch (apply修改本地文件而不创建提交)
最后检查无误:
# git push
- Git flow
master:
是用于保存官方的发布历史(使用版本号为master上的所有提交打TAG)
develop:
是用于集成各种功能的开发分支
feature:
新功能的开发使用独立的分支(基于develop分支)。为了备份或便于团队之间的合作,这种分支也可以被推送到中央仓库。功能开发完后合并(merge)到develop分支。功能开发永远不应该直接牵扯到master。
release:
临近发布是基于develop的分支建立release分支,这个分支只能修复bug或者开发文档和发布相关的工作;之后合并到master分支,用版本号打上标签,该分支上的改动合并到develop分支
hotfix:
发布后维护工作或紧急问题的快速修复,这是唯一可以直接基于master分支创建的分支(以bug描述命名),一旦问题修复,改动应该合并到master和develop分支(master还要使用更新的版本号打TAG)
Repo 常用命令:
- repo init
Options:
-u:指定一个URL,其连接到一个maniest仓库
-m:在manifest仓库中选择一个xml文件
-b:选择一个maniest仓库中的一个特殊的分支
Example:
repo init -u git@server2:/data/git/manifest_msm8939_5.0.git -m manifest.xml
- repo sync
参照清单文件.repo/manifest.xml克隆并同步版本库.如果某个项目版本库不存在,则相当于执行git clone,如果项目版本库已经存在,则相当于执行下面的两条指令:
git remote update 对每一个remote源执行了fetch操作
git rebase origin/branch 针对当前分支的跟踪分支执行rebase操作。
也可以选择克隆其中的一个项目: repo sync platform/build
- repo start
刚克隆下来的代码是没有分支的,repo start实际是对git checkout –b 命令的封装。为指定的项目或所有项目(若使用—all参数),以清单文件中为设定的分支,创建特性分支。这条指令与git checkout –b 还是有很大的区别的,git checkout –b 是在当前所在的分支的基础上创建特性分支,而repo start是在清单文件设定分
支的基础上创建特性分支
Example:
repo start stable --all
>>repo checkout
实际上是对git checkout 命令的封装,但不能带-b参数,所以不能用此命令来创建特性分支。
Example:
repo checkout crane-dev
- repo branches(查看分支)
repo diff(查看工作区文件差异)
实际是对git diff 命令的封装,用于分别显示各个项目工作区下的文件差异。
repo stage(把文件添加到index表中)
实际是对git add --interactive命令的封装、用于挑选各个项目工作区中的改动以加入暂存区。
>>repo prune(删除已经合并分支)
实际上是对git branch –d命令的封装,该命令用于扫面项目的各个分支,并删除已经合并的分支,用法如下:
repo abandon(删除指定分支)
实际上是对git branch –D 命令的封装,用法如下:
- repo status(查看文件状态)
实际上是对git diff-index、git diff-filse命令的封装,同时显示暂存区的状态和本地文件修改的状态
$repo/repo status platform/bionic
repo remote(设置远程仓库)
Example:
repo remote add org ssh://172.16.1.31/git_repo
repo push
repo push org
这是新添加的指令,用于向服务器提交代码,使用方法:
- repo forall
Options:
-c:后面所带的参数着是shell指令
-p:在shell指令输出之前列出项目名称
-v:列出执行shell指令输出的错误信息
- repo grep
相当于对git grep 的封装,用于在项目文件中进行内容查找
repo manifest
显示manifest文件内容
Usage:
repo manifest –o android.xml
- repo version
显示repo的版本号
- repo upload
repo upload相当于git push,但是又有很大的不同。它不是将版本库改动推送到克隆时的远程服务器,而是推送到代码审核服务器(Gerrit软件架设)的特殊引用上,使用SSH协议。代码审核服务器会对推送的提交进行特殊处理,将新的提交显示为一个待审核的修改集,并进入代码审查流程,只有当审核通过后,才会合并到官方正式的版本库中。
- repo download
主要用于代码审核者下载和评估贡献者提交的修订
- repo selfupdate
用于repo自身的更新
- repo status
repo forall -pc git pull
工具: SourceTree: 管理GIT代码分支的。 beyond compare: 比较代码,解决冲突的。 gerrit 代码review jenkins 代码编译