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下来

相关推荐
1379003409 小时前
Git 设置代理
git
南风过闲庭9 小时前
人工智能泡沫效应
大数据·人工智能·科技·搜索引擎·百度·ai
说私域10 小时前
社群共建与共享:以十点读书会为例探讨开源AI智能名片2+1链动模式S2B2C商城小程序的应用
大数据·人工智能·小程序
漫步者TZ11 小时前
【kafka系列】At Least Once语义
大数据·数据库·分布式·kafka
undo_try12 小时前
大数据组件(四)快速入门实时数据湖存储系统Apache Paimon(1)
大数据·flink·apache
中电金信12 小时前
中电金信:数字基础设施未来展望·行业定制与开源融合
大数据·人工智能
白鲸开源13 小时前
Apache SeaTunnel基于JDBC连接器开发教程
大数据
码界筑梦坊14 小时前
基于Flask的艺恩影片票房分析系统的设计与实现
大数据·后端·python·信息可视化·flask·毕业设计
产经电讯15 小时前
探索飞鹤奶粉奥秘,领会科技魅力
大数据·人工智能·科技
王百万_15 小时前
【ClickHouse 特性及应用场景】
大数据·数据库·clickhouse·数据治理·数据库架构