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

相关推荐
火车叼位1 小时前
告别发整个文件!用 Git Patch 优雅地传递代码变更
git
小雅痞2 小时前
[Java][Leetcode simple] 1. 两数之和
java·算法·leetcode
bingd012 小时前
慕课网、CSDN、菜鸟教程…2026 国内编程学习平台实测对比
java·开发语言·人工智能·python·学习
大飞哥~BigFei2 小时前
缓存一致性终极解决方案之Facebook租约机制的开源实现集成改造
java·缓存·开源
凌冰_2 小时前
Thymeleaf 核心语法详解
java·前端·javascript
AIBox3652 小时前
claude 镜像 api 使用指南(2026 年4 月更新)
java·服务器·前端·人工智能·gpt·前端框架
极光代码工作室2 小时前
基于SpringBoot的在线考试系统
java·springboot·web开发·后端开发
Gopher_HBo2 小时前
CompletableFuture运用原理
java·后端
庞轩px2 小时前
反射与动态代理——Java语言动态性的核心
java·spring·反射·aop·动态代理·类型