前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >重新搞懂Git,掌握日常命令和基本操作

重新搞懂Git,掌握日常命令和基本操作

作者头像
SpringSun
发布于 2023-07-09 02:38:44
发布于 2023-07-09 02:38:44
33700
代码可运行
举报
文章被收录于专栏:技术赋能学术技术赋能学术
运行总次数:0
代码可运行

1、git

Git 是一个免费的开源分布式版本控制系统,旨在快速高效地处理从小型到超大型项目的所有内容。 Git 易于学习,占用空间很小,性能快如闪电。它超越了Subversion,CVS,Perforce和ClearCase等SCM工具,具有廉价的本地分支,方便的暂存区域和多个工作流程等功能。

2、git&平台

git 是一个工具,是基础设施。我们平时说的git就是纯粹指git工具和其功能。但是我们常见github、gitlable、gitee等平台。 不要把他们和git划等号,因为git不用这些平台也可以在本地作为你自己的一个版本管理工具。这些平台是为了解决多人合作的云平台,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。

3、git开发流程

同2一样git只是一种工具,他并没有什么工作流程。日常开发中我们为了更好的协作产生了一些git开发流程规范。这种规范或者风格叫git workflow。 目前比较知名的有git-flow 、github-flow 、gitlable-flow。

  • git-flow

Git Flow 主要是依靠五种分支,master,develop,feature branchs ,release branchs , hoxfixes来进行协作,因为比较复杂,所以并没有那么多人用。

  • github-flow

github-flow 只有个主干/长期分支,master分支用来”持续发布“使用,但是由于只有主分支所以发布不稳定,master通常会设置 protected 分支保护,只有有权限的人才能推送代码到 master 分支。我们常用的github平台就是采用该流程,其中特色就是Pull Request 方式。如果你要修改需要Pull Request 然后进行沟通和code review才能由有权限的人合并进去。当然gitlable平台你也能按照这种方式进行组织,他的Merger Request相当于Pull Request。

  • gitlable-flow

基于环境的的分支模型——面向持续发布模型,有master,同时还有Pre-Production、Production分支用于维护发布在不同环境上的代码。 采用上游到下游流动的方式,大家都在master上进行开发,当要发布的时候将master分支合并到Pre-Production测试通过后再合并到Production进行发布。如果有bug需要从master向下游合并,除非特殊情况需要直接在其它分支上修改。

4、git操作

我们学习git的时候不要把远程仓库和本地仓库混淆在一起,如果你混淆在一起就会陷入到梳理他们的逻辑混乱当中。

我们说了远程仓库只是为了协同工作,我们可以把远程仓库当作是本地仓库的镜像,只是用于我们拉取和提交来同步文档。 所以对于远端仓库的主要操作就是:

  • 拉取远程项目
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 拉取远端项目到本地
git clone https://url
  • 关联本地项目到远程
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#初始化本地 Git 仓库,会生成一个 .git 隐藏文件夹
git init

#将本地项目关联远程仓库
git remote add origin https://url

#上传之前更新一下,确保没有冲突,master 为分支名称
git pull --rebase origin master

#添加目录下所有发生改变的文件到暂存区
git add .

#添加提交注释信息
git commit -m '注释xxx'

#提交到 master 分支
git push -u origin master

以上就是基本的远端仓库和本地仓库的操作,接着我们下面的操作都是争对本地仓库的讲解,你需要了解git的基本知识,比如git有三个部分:工作区、暂存区、版本库。 工作区就是我们操作文档的地方,以windwos作为演示,当我们在一个文件夹下初始化了git管理,那么该文件夹下的三个部分就形成了。至于为什么需要三个部分,就像两口子吵架需要一个中间人调节,有些事情可以先和中间人商量确定好后再传达给对方,减少冲突。

git是基于分支管理的,默认分支就Master分支,争对于分支我们可以做那些操作呢?

  • git pull/git fetch/git push git pull 拉取远端的最新提交到本地,并与本地当前分支合并更新所有区。 git fetch 拉取远端的最新提交到本地,不会自动合并,也不会更新工作区。 git push 推送本地仓库到远程仓库,推送的是本地版本库里面的内容,如果工作区或者暂存区没提交则不会提交。
  • git add
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 添加一个文件 xx 到暂存区,多个文件以空格隔开
git add xx
# 添加全部文件到暂存区
git add .
  • git commit
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 提交暂存区的文件到本地仓库,并添加提交备注
git commit -m '备注'
# 相当于 git add . 加上 git commit -m '备注',也就是直接从工作区一步完成提交
git commit -am '备注'
  • git log
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#查看所有提交记录
git log

#查看最近10条记录
git log -n10
  • git tag tag就是标签,常用来标记版本,相当于commit的一个标记。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 创建一个标签,默认打在最新提交的commit上
git tag [tagname]

# 创建一个标签,在指定commitid上
git tag [tagname] [commitId]

# 查看标签列表
git tag

#提交所有tag到远端,因为git push不会推送标签
git push origin --tags
  • git reset git reset 用来重置到过去的某个版本,有五种模式(--mixed、--soft、--hard、--merge),重置后不要的版本就找不回来了。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 重置并撤销 git commit 以及 git add,保留工作区中所有修改
git reset --mixed commitID

# 重置并撤销 git commit,但不撤销 git add,保留工作区中所有修改
git reset --soft commitID

# 重置并撤销 git commit 以及 git add,并且删除工作区中所有修改
git reset --hard commitID

# 取消某次合并
git reset --merge commitID
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 提交到暂存区的内容退回到工作区,相当于撤销 git add .
git reset HEAD
# 把暂存区的 xx 重新放回到工作区
git reset HEAD xx
# 重置到上一个版本
git reset --hard HEAD^
# 重置到上上一个版本,可以继续到上一个
git reset --hard HEAD^^
# 重置到指定版本
git reset --hard commitID
  • git restore
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 撤销上一次 commit 之后所有文件的修改,即撤销暂存区
git restore .

# 把暂存区的 xx 重新放回工作区,和上面的 git reset HEAD xx 作用一样
git restore --staged xx
  • git revert

和git reset类似,只是会保留不要的版本。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 还原上次提交
git revert HEAD

# 还原某次提交
git revert commitID
  • git diff

比较差异

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 工作区和暂存区比较
git diff

# 工作区和版本库最后版本比较
git diff head

# 暂存区和版本库比较
git diff –cached
  • git checkout checkout命令用于版本库或者暂存区域中撤销更改到工作目录,同时也可用于切换分支。为了记忆错乱避免混乱,我通常不用改操作,因为对于撤销完全可以用reset和restore,而对于分支切换可以用switch,他们从语义上来说更贴切。所以这个操作你可以不用,我也难得记!

以上这些就是操作某一个分支的基本命令,我们说了git是分支管理,那么多个分支呢。接下来我们就介绍一些多分支之间操作的命令。多分支是为了控制不同工作和并行工作,分支的建立可以是本地的,也可以是和远端某个分支关联的(这个远端可以是任意分支)。所以git是灵活的,远端和本地我们任然要区分开。

  • git branch
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 创建本地分支newbranch,但是不切换到该分支,仍然停留在当前分支
git branch newbranch

# 创建newbranch分支,并切换到newbranch分支上去
git branch -M newbranch

# 新建一个分支,与指定的远程分支建立关联
git branch --track [newbranch] [remote-branch]

# 删除本地newbranch分支
git branch -d newbranch
  • git switch
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 切换到xx分支
git switch xx
  • git stash 当我们切换到不同分支进行工作的时候,可能当前分支的修改我们还没完成,但是又要紧急处理另外一个分支,此刻的修改如果不提交(git add -> git commit)。那么切换的时候是阻止我们切换的,提示修改未提交或者隐藏,git stash就是用来隐藏分支工作区修改但不想提交的。将修改git stash后可以生成一个编号,等我们处理完切回来得时候就可以取出该修改还原到工作区并删除隐藏。 而这个功能的前提就是你要知道不同分支上的修改在你提交的版本库之间是有差异性的,比如文件a.txt 我们添加到master分支,然后提交,然后你切换到newbranch分支上是没有a.txt的。如果b.txt在两个分支上都有,那么在其中一个修改了提交后,在另外一个分支b.txt文件你是看不到修改的。 注意:只有提交的文件才会进入git跟踪,如果c.txt我在master分支上创建了,但是它在工作区,我们切换到newbranch分支任然能看到它,这个时候谁先提交就记录到谁的分支
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#把当前分支的修改储存隐藏起来
git stash

# 查看stash列表
git stash list

# 取出stash中最近一次的修改并删除stash记录
git stash pop

# 取出指定stash
git stash apply stash@{0}

# 删除指定stash
git stash drop stash@{0}
  • git merge 既然不同分支有不同的版本,我们可能需要合并分支的差异。比如我们要将newbranch的分支合并到master上,如果我们当前不在master分支,那么我们需要先switch到master分支。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 把newbranch分支合并到master分支
git merge newbranch
  • git rebase rebase 和 merge作用都是一样的,区别是rebase 没有分叉记录,他们合并后两个分支的HEAD都指向最新的版本,merge的提交历史更完整。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 把newbranch分支变基到master分支
git rebase newbranch
  • git cherry-pick

当我们要合并某个分支上的特定提交版本,我们可以使用git cherry-pick将某分支commitID版本合并到当前分支。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#合并其它分支的commitID
git cherry-pick commitID

整篇就是关于git介绍和git容易混淆的概念及命令,包括日常的基本操作。如果其它进阶和骚操作,可以查看文档或搜索,一般来说掌握这些足够了,其它需要再去查就行。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
【STM32F429】第3章 ThreadX GUIX和GUIX Studio介绍
最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=98429 第3章   ThreadX GUIX和GUIX Studio介绍 本章主要
Simon223
2020/10/27
8480
【STM32F429】第3章   ThreadX GUIX和GUIX Studio介绍
【STM32H7】第2章 ThreadX USBX协议栈介绍
教程更新中:http://www.armbbs.cn/forum.php?mod=viewthread&tid=108546 第2章 ThreadX USBX协议栈介绍 本章节介绍 ThreadX
Simon223
2021/10/20
7160
【STM32H7】第5章 ThreadX NetXDUO网络协议栈介绍
最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=104619 第5章 ThreadX NetXDUO网络协议栈介绍 本章节介绍 T
Simon223
2021/04/19
9900
【STM32H7】第5章   ThreadX NetXDUO网络协议栈介绍
叱咤风云的ThreadX全家桶正式加入开源免费的大浪潮中
说明: 1、去年微软宣布收购ThreadX,但是没有公布后续策略,uCOS全家桶进入开源免费后,ThreadX也宣布正式加入。 2、微软未来四年将投资50亿美元到物联网上,收购Express Logic是该战略的一部分。 3、ThreadX的产品涵盖了各种领域,包括NASA的多个太空探测项目,飞机自动驾驶仪系统,火星侦察轨道器等。 4、ThreadX及其所有中间件的安全认证等级,至今没有一款小型RTOS可以与其匹敌。 (1)医疗 - FDA510(k),IEC-62304 Class C,IEC-60601,ISO-14971 (2)工业 - UL-1998,IEC-61508 SIL 4 (3)运输/铁路 - EN50128 SIL 4,BS50128,  49CFR236,IEC-61508 (4)航空航天设备 - DO-178B,ED-12B,DO-278 (5)汽车    - IEC-61508 ASIL D (6)核应用 - IEC-61508 (7)家电    - UL/IEC 60730/60335 各种安全等级基本都达到了最高。 像工业级安全认证IEC61508,ThreadX满足最高等级SIL4,而SafeRTOS,embOS,uCOS-II都只是SIL3。 5、github地址:https://github.com/azure-rtos 6、官网地址:https://azure.microsoft.com/zh-cn/services/rtos/#overview 随着uCOS和ThreadX全家桶都开源,其它RTOS影响是巨大的,还没有开源的,可能也要加入开源大浪了。
Simon223
2020/05/27
1.1K0
【全网首发】在小熊派上跑threadX操作系统?来,从搭建环境开始玩起!
去年微软宣布收购ThreadX,但是没有公布后续策略,uCOS全家桶进入开源免费后,ThreadX也宣布正式加入。微软未来四年将投资50亿美元到物联网上,收购Express Logic是该战略的一部分。ThreadX的产品涵盖了各种领域,包括NASA的多个太空探测项目,飞机自动驾驶仪系统,火星侦察轨道器等。ThreadX及其所有中间件的安全认证等级,至今没有一款小型RTOS可以与其匹敌。
Mculover666
2020/07/16
2K0
【全网首发】在小熊派上跑threadX操作系统?来,从搭建环境开始玩起!
【STM32F429】第6章 ThreadX操作系统移植(IAR)
论坛原始地址(持续更新):http://www.armbbs.cn/forum.php?mod=viewthread&tid=99514 第6章 ThreadX操作系统移植(IAR) 本章节将为大
Simon223
2021/03/08
7530
【STM32F429】第6章   ThreadX操作系统移植(IAR)
【STM32H7】第3章 RTX5操作系统介绍
论坛原始地址(持续更新):http://www.armbbs.cn/forum.php?mod=viewthread&tid=93149 第3章 RTX5操作系统介绍 本章节介绍一下RTX5操作系
Simon223
2021/03/11
7610
【STM32H7】第3章   RTX5操作系统介绍
【STM32F429】第4章 ThreadX操作系统移植(MDK AC5)
论坛原始地址(持续更新):http://www.armbbs.cn/forum.php?mod=viewthread&tid=99514 第4章 ThreadX操作系统移植(MDK AC5) 本章
Simon223
2021/03/05
5670
【STM32F429】第4章   ThreadX操作系统移植(MDK AC5)
【STM32F429】第5章 ThreadX操作系统移植(MDK AC6)
论坛原始地址(持续更新):http://www.armbbs.cn/forum.php?mod=viewthread&tid=99514 第5章 ThreadX操作系统移植(MDK AC6) 本章
Simon223
2021/03/08
9120
【STM32F429】第5章   ThreadX操作系统移植(MDK AC6)
【STM32F429】第9章 ThreadX任务管理
论坛原始地址(持续更新):http://www.armbbs.cn/forum.php?mod=viewthread&tid=99514 第9章 ThreadX任务管理 对于初学者,特别是对于没有
Simon223
2021/04/23
1.1K0
【STM32F429】第9章   ThreadX任务管理
【STM32F429】第14章 ThreadX调度锁,任务锁和中断锁(调度阀值)
论坛原始地址(持续更新):http://www.armbbs.cn/forum.php?mod=viewthread&tid=99514 第14章 ThreadX调度锁,任务锁和中断锁(调
Simon223
2021/06/24
5690
【STM32F429】第7章 ThreadX GUIX移植到STM32F429(MDK AC5)
最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=98429 第7章 ThreadX GUIX移植到STM32F429(MDK AC
Simon223
2020/12/01
1K0
【STM32F429】第7章   ThreadX GUIX移植到STM32F429(MDK AC5)
【STM32F429】第3章 ThreadX USBX协议栈移植到STM32F429
教程更新中:http://www.armbbs.cn/forum.php?mod=viewthread&tid=108546 第3章 ThreadX USBX协议栈移植到STM32F429 本章节
Simon223
2021/10/20
4940
基于STM32H7的ThreadX+Filex+GUIX+NetXDUO+USBX综合模板发布,史上最强安全认证综合模板,稳如泰山。
从源码上线到今天差不多半年了,一直在单独的研究各个中间件,年底了发布个全套,方便想用的人直接一步到位。 ThreadX内核,FileX,NetXDUO,USBX,GUIX悉数到场,含MDK AC5,MDK AC6,IAR和GCC四个版本。 史上最强安全认证综合模板,稳如泰山。
Simon223
2021/02/04
6360
国产嵌入式操作系统发展思考
嵌入式操作系统历史悠久、门类繁多、用途广泛,不仅包括嵌入式实时多任务操作者系统(RTOS)、开源的 Linux、机器人和路由器操作系统,还包括新型的物联网操作系统,以及边缘计算操作系统平台。笔者认为,只要是国人开发的,国人参与维护的开源项目,都是广义上的“国产嵌入式操作系统”,随着中国物联网产业迅猛发展,国产装备自主可控需求旺盛,国产嵌入式操作系统发展步入快车道。 1.  国产物联网操作系统颇具影响力 睿赛德电子科技公司这个名字大家不是很熟悉,但是他们的产品 RT-Thread 在物联网
腾讯大讲堂
2019/10/14
3.2K0
国产嵌入式操作系统发展思考
【STM32F429】第18章 ThreadX消息队列
本章节为大家讲解ThreadX的一个重要的通信机制----消息队列,初学者要熟练掌握,因为消息队列在实际项目中应用较多。
Simon223
2021/07/15
7020
【STM32F429】第12章 ThreadX任务优先级修改及其分配方案
论坛原始地址(持续更新):http://www.armbbs.cn/forum.php?mod=viewthread&tid=99514 第12章 ThreadX任务优先级修改及其分配方案
Simon223
2021/06/24
4910
【STM32H7】第4章 ThreadX操作系统移植(MDK AC5)
论坛原始地址(持续更新):http://www.armbbs.cn/forum.php?mod=viewthread&tid=99514 第4章 ThreadX操作系统移植(MDK AC5) 本章
Simon223
2021/03/05
6530
【STM32H7】第4章   ThreadX操作系统移植(MDK AC5)
【STM32F429】第17章 ThreadX事件标志组
论坛原始地址(持续更新):http://www.armbbs.cn/forum.php?mod=viewthread&tid=99514 第17章 ThreadX事件标志组 前面的章节我们
Simon223
2021/07/08
7850
【STM32F429】第13章 任务调度—抢占式,时间片和合作式
论坛原始地址(持续更新):http://www.armbbs.cn/forum.php?mod=viewthread&tid=99514 第13章 任务调度—抢占式,时间片和合作式 本章教
Simon223
2021/06/24
4780
推荐阅读
相关推荐
【STM32F429】第3章 ThreadX GUIX和GUIX Studio介绍
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档