git基础操作

入门介绍

可以看到有4个区域,remote就是远程仓库,workspace则是本地可以编辑的代码分支, repository就是本地的仓库,存储者远程代码分支,也存储者本地代码分支

拉取远程分支到本地

假如远程仓库有三个分支master,dev,bugfix,我们想要拉取dev分支进行开发,最简单的就是git clone一份代码到本地git clone

shell 复制代码
git clone https://github.com/xxx/yyy.git

这样直接拉取的是master分支,通过git branch命令可以看到本地只有一个master分支

shell 复制代码
$ git branch
* master

使用git branch -a可以看到远程分支有哪些

shell 复制代码
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev
  remotes/origin/bugfix

需要注意的是remotes/origin/xxx的这些分支是不可以编辑的,你可以认为这些分支就是为了同步远程代码使用的。

创建指定分支

直接clone后本地只有一个master分支是可以编辑的,如果想要编辑其他的分支则需要自己创建,例如我们想要在dev分支上进行开发,则需要先将远程的dev分支拉取下来,通过git fetch可以拉取最新的分支到本地,

shell 复制代码
git fetch origin dev

git fetch抓取到新的远程跟踪分支时,本地的工作区(workspace)不会自动生成一份可编辑的副本,抓取结果是直接送到版本库(Repository),其实也就是我们看到的remotes/origin/dev

通过git checkout可以切换到指定分支

shell 复制代码
git checkout origin/dev

从这个分支我们创建一个可以编辑的本地分支git branch branch-name

shell 复制代码
git branch dev

然后切换到我们新创建的可编辑分支

shell 复制代码
git checkout dev

当然我们可以一步创建,从origin/dev分支创建一个可编辑的dev分支,并切换到dev

shell 复制代码
git checkout -b dev origin/dev

很多时候我们基于dev分支开发了一部分代码,提交了MR但是还没有合并,这个时候可能第二个需求就过来了,如果还在dev上开发可能会污染之前的代码,这个时候就可以再从origin/dev新建一个分支来开发

origin/dev是一个分支

同步最新代码

我们在本地提交了一些commit,这个时候想要把远程的代码同步到本地分支,一种简单办法就是使用rebase命令

shell 复制代码
git fetch origin dev # 拉取远程的dev分支到本地的origin/dev
git rebase origin/dev # 本地origin/dev分支的commit合并到dev分支

rebase的意思就是变基,原本dev的基是c,也就是我们在c后面提交了c5c6,c就是dev的基,我们通过rebase的命令将基变更为origin/dev,这个时候基就是c3,我们把后序的提交c5c6嫁接到c3后面,就是变基。

  1. 两个分支的最近父节点,这个例子中最近的父节点是c
  2. 当前dev分支从父节点以后的所有commit存储一个临时文件
  3. 将当前分支的基准点设置为同步分支(origin/dev)的head节点
  4. 然后依次引用临时文件中的提交记录

其实我觉得rebase就是将其他的分支的差异化commit同步到本地分支

多个commit合并成一个

本地开发的时候经常会多次提交commit,这些commit可能只是整个需求的一小部分,开发完成之后我们会把所有的代码一次推送到远程,每个需求只有一个commit,这样主分支就会比较干净,使用rebase命令可以将多个commit合并成一个

shell 复制代码
git rebase -i c # c以后的commit合并成一个

执行后会进入交互界面

shell 复制代码
p c4 xxx
f c5 xxx
f c6 xxx
f c7 xxx
f c8 xxx

p的意思是最终选取那个commit最为最终的commit,并且选中的commit的message最为此次提交的信息,s的意思是把这个commit合并掉,并且message也合并到一起,f的意思是把这次commit合并成一个,但是message丢弃掉。对我们来说只要pick一个commit就可以,其他的commit都改成f或者s

同步某个commit

代码开发过程中经常会拉补丁分支,例如当前开发分支是dev2,而上个版本的分支是dev1,dev2是从dev1拉取的。现网运行的版本的是dev1,跑着跑着发现了个bug,这个时候就需要在dev1上打补丁,并重新出版本

shell 复制代码
git checkout -b fix_dev1 origin/dev1 # 拉取最新分支
# 修改代码并提交
git commit -s "xxx"
# 推到远程仓库
git push origin fix_dev1:dev1

dev2是从dev1拉取的,dev2回有相同的bug,我们在dev1修改的代码也要同步到dev2上,这个时候就可以用cherry pick

shell 复制代码
git switch dev2 # 切换dev2分支
git cherry-pick <commitHash>

就是从其他的分支搞一个commit下来

相关推荐
~~李木子~~21 小时前
git仓库管理
git
Elasticsearch21 小时前
用 AI 驱动的威胁狩猎提升公共部门的网络防御
elasticsearch
白鲸开源21 小时前
实战干货:Apache DolphinScheduler 参数使用与优化总结
大数据·程序员·开源
秦jh_1 天前
【git】远程操作
git
yumgpkpm1 天前
CMP(类Cloudera CDP 7.3 404版华为Kunpeng)与其他大数据平台对比
大数据·hive·hadoop·elasticsearch·kafka·hbase·cloudera
JZC_xiaozhong1 天前
跨系统流程如何打通?选 BPM 平台认准这三点
大数据·运维·自动化·数据集成与应用集成·业务流程管理·流程设计可视化·流程监控
中科岩创1 天前
某地公园桥梁自动化监测服务项目
大数据·人工智能·物联网·自动化
希赛网1 天前
2025年第四期DAMA数据治理CDGA考试练习题
大数据·cdga·cdgp·dama·数据治理·题库
keep__go1 天前
zookeeper单机版安装
大数据·运维·zookeeper
Serverless 社区1 天前
助力企业构建 AI 原生应用,函数计算FunctionAI 重塑模型服务与 Agent 全栈生态
大数据·人工智能