Git和Repo

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/Settingsframeworks/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)。

相关推荐
就叫_这个吧2 小时前
Java递归方法实现面包屑导航
java·开发语言
fīɡЙtīиɡ ℡2 小时前
AI 应用系统设计
java·开发语言·人工智能
城管不管2 小时前
重生——第十一次面试之挖财一面2026.8.19已OC
java·服务器·jvm·数据库·spring·面试·职场和发展
码匠许师傅2 小时前
【C++ 面试真题】26. 聊聊 C++ 的智能指针
java·c++·面试
AI绘画哇哒哒3 小时前
【建议收藏!】35岁后端血泪忠告,这3类人别硬转Agent(过来人亲述)
java·人工智能·后端·ai·程序员·大模型·agent
最强小杰3 小时前
gpt-5.6-sol 频繁报 503 怎么办?区分容量熔断和限速 429 的排查方法 + 可复用 retry wrapper
java·人工智能·gpt·ai
fpcc5 小时前
工具使用—git diff命令分析说明
git·工具
console.log('npc')5 小时前
Git 删除指定提交记录操作指南
git
吠品5 小时前
Wine 在 Linux 上运行 Windows 软件完整指南
java·linux·服务器
随风丶飘5 小时前
[特殊字符] 告别“update“和“fix bug“——Smart Git Commit LLM 让 AI 帮你写专业的 Git 提交信息
人工智能·git·bug