Git和Repo的简介
Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。
Repo是谷歌用Python脚本写的调用git的一个脚本。主要是用来下载、管理Android项目的软件仓库(也就是说Repo是用来管理给Git管理的一个个仓库的)
repo命令使用
下载repo工具
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
or $ wget http://android.git.kernel.org/repo
or $ curl http://android.git.kernel.org/repo >~/bin/repo
$ chmod a+x ~/bin/repo
repo init -u gitserver:manifests.git -m xxx.xml repo项目初始化(xxx.xml文件决定初始化的项目)
repo sync 下载项目代码
repo start xxx --all 创建xxx项目对应的分支或者切换分支(--all意为将所有模块都归为当前xxx分支下)
repo branch 查看当前项目代码所在的分支
repo abandon 分支名 删除不用的本地分支(同git branch -d 分支名)
repo forall -c git checkout -b xxx 项目对应的远程分支名(最好是本地分支和远程分支同名,除主分支外)
repo -c -p git checkout 本地分支 远程分支
repo help command 显示command的详细的帮助信息内容
git命令使用
git status 显示之前更改的代码文件
git stash 保存更改的代码状态
git stash sava {name} 保存更改的代码状态
git stash list 查看保存记录
git stash apply 还原保存的修改,不从栈中移除
git statsh pop stash@{x} 还原保存的更改,从栈中移除
git stash clear 清除保存的更改记录
git pull --rebase 服务器本地代码同步更新远程库代码
在执行之前需要查看本地代码有没有修改(git status),若有,先保存修改记录(git stash),更新完成后回复更改(git stash applay),如果没有直接执行。(本地有修改记录更新会出错)
git commit 提交修改
git commit -a 一次性提交修改项
git push origin HEAD:refs/for/远程分支名 把代码提交到临时代码库(为gerrit评审)
git add . 一次性提交修改项和添加项
git add 文件 单独提交修改项或添加项
git rm 文件 提交删除文件
git log 查看远程代码提交记录节点信息(q退出)
git reset --soft id 回退到指定提交位置
git reset HEAD^ 撤销最近一次提交,保留修改,只删掉提交记录
git reset --hard HEAD^ 撤销最近一次提交,修改记录也删掉
git reset --soft HEAD^ 代码提交后(git push)需要回退到提交之前的状态
git checkout 文件名 把修改的或删除的文件回退到原状态
git checkout . 回退全部修改
git branch 查看当前代码所在的本地分支(带有*的为当前本地代码分支)
git branch -b 本地分支名称 远程分支名称 将本地代码切换到远程对应的分支
git checkout -b 本地分支名称 远程分支名称 切换到指定的分支
git chencout 本地分支名称 切换到指定分支
git branch -a 查看所有分支
git diff 查看修改的内容
git diff 文件名 查看指定文件 的修改
git工作流程
Workspace:工作区
Index/Stage:暂存区
Repository:仓库区(或本地仓库)
Remote:远程仓库

git提交的内部流程

git add: 将工作区修改的内容提交到暂存区,交由git管
理。
**git commit:**将暂存区的内容提交到本地仓库,并使得当前分支的HEAD向后移动一个提交点。

git reset: 把当前分支指向另一个位置,并且相应的变动工作区和暂存区。git reset-soft [commit] 只改变提交点,暂存区和工作目录的内容都不改变
git reset -mixed [commit] 改变提交点,同时改变暂存区的内容
git reset -hard [commit] 暂存区、工作区的内容都会被修改到与提交点完全一致的状态
git reset ..hard HEAD 让工作区回到上次提交时的状态

**rebase:**rebase又称为衍合,是合并的另外一种选择。在开始阶段,我们处于new分支上,执行gitrebasedev,那么new分支上新的commit都在master分支上重演一遍,最后checkout切换回到new分支。这一点与merge是一样的,合并前后所处的分支并没有改变。gitrebasedev,通俗的解释就是new分支想站在dev的肩膀上继续下去。rebase也需要手动解决冲突。
git rebase dev

rebase与merge的区别
现在我们有这样的两个分支,test和master,提交如下:

在master执行git merge test,然后会得到如下结果:

在master执行git rebase test,然后得到如下结果:

git与repo的区别
1、操作范围对比
git add/commit:
- 仅操作单个 Git 仓库。
- 示例:修改
frameworks/base目录下的代码后,需进入该目录执行git add .和git commit
repo upload:
-
可同时操作多个 Git 仓库(通过清单文件定义)。
-
示例:修改了
packages/apps/Settings和frameworks/base,执行repo upload .会上传所有关联仓库的提交。
2、工作流程
Git 流程:
-
修改代码 →
-
git add .(暂存修改) -
git commit -m "fix: 修复XX问题"(本地提交) -
git push origin HEAD:refs/for/main(推送到 Gerrit 审查)
Repo流程:
-
修改代码
-
git add .+git commit(本地提交) -
repo upload .(自动推送所有相关提交到 Gerrit)。