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

相关推荐
摇滚侠12 小时前
Unsupported class file major version 61
java·maven
那个失眠的夜12 小时前
Arrays&Lambda&JDK8新特性
java
ch.ju12 小时前
Java程序设计(第3版)第二章——空返回值
java
草莓熊Lotso12 小时前
LangChain从入门到精通:环境搭建→核心能力→LCEL链式编程全实战
android·java·linux·服务器·langchain
贾斯汀玛尔斯20 小时前
每天学一个算法--LSM-Tree(Log-Structured Merge Tree)
java·算法·lsm-tree
bitt TRES20 小时前
springboot与springcloud对应版本
java·spring boot·spring cloud
Y0011123621 小时前
JavaWeb-end
java·servlet·web
bzmK1DTbd21 小时前
Git版本控制:Java项目中的分支管理与合并策略
java·开发语言·git
JWASX1 天前
【RocketMQ 生产者和消费者】- 事务源码分析(1)
java·rocketmq·java-rocketmq
AlunYegeer1 天前
JAVA,以后端的视角理解前端。在全栈的路上迈出第一步。
java·开发语言·前端