git常见使用

1. 概念

  • 分布式,有远程仓库和本地仓库的概念,因此要注意同步问题
  • git是面向对象的,本质是内容寻址系统。.git目录下有个文件夹objects,存储git库中的对象,git就是根据object建立一种树形结构,将文件和通过hash的方式关联起来

2. 工作区 暂存区 本地仓库 远程仓库

关系图如下:
在这里插入图片描述

  • workspace:工作区,平时写代码的地方
  • index:暂存区,让写完后的代码变成待提交状态
  • repository:本地仓库,提交暂存区的代码,记录进入代码本地管理
  • remote:远程仓库,将本地仓库修改好的代码提交到远程,可供远程协作的人下载

当创建一个git项目,git会在根目录创建一个git目录,需要重点理解的是以下五个:

  • HEAD:是指针的指针,用来标记当前的提交
    • 新建一个分支的时候其实仅仅是改变了HEAD的指向,这也是git分支比较轻量的原因
  • hooks:用来在git操作前后进行一些操作
  • index:本地的暂存区
  • objects是上面所提到的内容
  • refs:分支的引用

简单来说,repository由git维护的三棵“树”组成:

  • workspace:持有实际文件
  • index:像个缓存区域,临时保存你的改动
  • HEAD:指向最后一次提交的结果

3. 提交代码

开始git操作本地必须有一份代码和remote相连,要么从remote拉取(适用于代码存在remote的情况),要么自己上传本地代码连接remote(适用于repository初次上传到remote的情况)

  • git clone <url>:克隆remote的版本到本地,成功后本地就有了一样的代码,并且也已经与remote连接成功

上传本地代码并连接remote操作大致如下:

1. 在项目的根目录打开Git Bash Here
2. 执行以下步骤:
    git init
    git add .
    git commit -m "first commit"
    git remote add origin 远程仓库地址
    git push -u origin master

修改代码后将其提交到index:

  • git add .:添加当前目录所有文件到index
  • 提交后没有任何提示,可以用git status查看文件是否有修改,是否进入index,已经提交到repository的不会展示

将index里文件提交到repository,这是个离线操作:

  • git commit -m "message":将index里文件提交到repository,message的位置填写本次提交修改的内容和一些注释

将repository提交到remote:

  • git push <remote> <branch><remote>位置填写remote名称,<branch>填写需要提交的分支
    • git push origin master:推送到远程origin仓库的master分支

4. 关于协作

拉取remote代码到repository:

  • git pull <remote> <branch><remote>写remote名称,<branch>写拉取remote的分支
    • git pull origin master:拉取远程origin仓库的master分支到repository
  • 将代码提交到remote之前,最好先拉取一下远程的最新代码,以免产生冲突

4.1 分支

在合作中有可能会有并行开发的需求,但可能不会同时上线,不能把没有开发完成的分支上线,所以就出现了分支branch

分支的功能:从同一份稳定代码拉出有相同代码的分支,每个人在自己的分支上开发提交代码,不会互相打扰,完成后再进行代码的合并

  • master是默认的分支,在其他分支上进行开发,完成后再将它们合并到主分支上
  • 除非将分支推送到远程仓库,不然该分支是不为别人所见的

举个例子实践一下:

  • git checkout -b dev:创建并切换到dev分支
    • 加上-b参数表示创建并切换
    • git branch dev + git checkout dev
  • git branch:查看所有本地分支,当前分支前面会标一个*号
  • git branch -d dev:删除dev分支

4.2 合并分支

合并之前确保要合并的两个分支都是当前分支的最新代码(pull一下),再切换到要保存合并代码的分支

  • git merge <branch>:合并指定分支到当前分支
  • git log --graph:查看分支合并图
  • 合并后可能出现冲突,需要修改文件手动合并这些冲突
  • git add <filename>:来标记合并成功

常见冲突管理:

  • git merge --abort:撤销合并操作,回到开始合并之前的状态
  • 当解决完冲突后,在合并完成后发现一个错误,git reset --hard就可以回滚到那个合并之前的状态

git常见命令速查表:
在这里插入图片描述

5. 常见场景及解决方案

5.1 stash

场景:正在feature分支下开发新需求,但是线上突然出现bug要马上修复,需要切到master分支

只需要git stash就可以把代码存起来,修复完线上问题后切回feature分支,用git stash apply就可恢复代码

一些相关命令:

# 保存当前未commit的代码
git stash

# 保存当前未commit的代码并添加备注
git stash save "备注的内容"

# 列出stash的所有记录
git stash list

# 删除stash的所有记录
git stash clear

# 应用最近一次的stash
git stash apply

# 应用最近一次的stash,随后删除该记录
git stash pop

# 删除最近的一次stash
git stash drop

5.2 reset –soft

应用场景:有的时候不小心把不该提交的内容commit了,想改回来就只能再commit一次,但就多了一条“黑历史”

只需要`git reset --soft HEAD^,相当于后悔药,可以再次修改重新提交,保持干净的commit记录,这说的是未push的commit。

对于已经push的commit也可以使用该命令,不过再次push时,由于远程分支和本地分支有差异,需要强制推送git push -f来覆盖被reset的commit

PS:在reset --soft指定commit时,会将该commit到最近一次commit的所有修改内容全部恢复,而不是只针对该commit

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/468369.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

sentinel黑白名单权限控制

黑白名单权限控制 规则配置 规则创建 创建一个 AuthorityRule 规则对象三个关键要素 setStrategy: 黑白名单类型setResource: 规则和资源的绑定关系setLimitApp: 限制的来源 调用 AuthorityRuleManager.loadRules()加载规则 监听器实例化和管理 AuthorityPropertyListener…

SpringCloud Alibaba 入门简介

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第十一篇&#xff0c;即介绍 SpringCloud Alibaba 的入门信息。 二、出现的原因 Spring Cloud Netflix…

基于django的CRM客户关系管理系统的python设计与开发flask-vue

本基于django的CRM系统是根据当前客户关系相关的内容实际情况开发的&#xff0c;在系统语言选择上我们使用的python语言&#xff0c;数据库是小巧灵活的MySQL数据库&#xff0c;本系统的开发可以极大的提高基于django的CRM系统的管理效率。 本基于django的CRM系统采用python语言…

计算机网络分层模型介绍

计算机网络分层模型是一种组织网络通信的方法&#xff0c;它将复杂的网络通信任务分解为多个较小的、更易于管理的层次。每个层次负责处理特定的通信任务&#xff0c;并与上下层交互。最著名的分层模型是OSI&#xff08;开放系统互联&#xff09;模型和TCP/IP模型。下面将详细介…

Python爬虫新手村上手指南②

HTTP与HTTPS HTTP协议 全称是Hypertext Transfer Protocol 中文意思是&#xff1a;超文本传输协议&#xff0c;是一种发布和接收HTML(Hypertext Markup Language)页面的方法。 服务端口号为80端口 HTTPS协议 全称是Hypertext Transfer Protocol over Securesocket Layer …

BootScrap详细教程

文章目录 前言一、BootScrap入门二、导航三、栅格系统四、container五、面板六、媒体对象七、分页八、图标九、实现动态效果 前言 BootScrap是别人帮我们写好的CSS样式。如果想要使用BootScrap&#xff0c;需要先下载下来&#xff0c;在页面上引入&#xff0c;编写HTML需要按照…

【C语言】空心正方形图案

思路&#xff1a; 1&#xff0c;两行两列打印* &#xff1a;第一行和最后一行&#xff0c;第一列和最后一列。 2&#xff0c;其他地方打印空格。 代码如下&#xff1a; #include<stdio.h> int main() { int n 0; int i 0; int j 0; while (scanf("…

【LabVIEW FPGA入门】并行执行

利用图形化编程的并行特性以及 FPGA 上 LabVIEW 图的真正并行实现&#xff0c;您可以通过将应用程序代码划分为更小的进程来进一步优化执行速度。与整个应用程序在一个循环中运行相比&#xff0c;这使得每个进程能够实现更高的循环速率和更高的应用程序整体执行速率。 …

除了 ChatGPT,还有哪些好用的AI工具?

0. 前言 OnlyFans 订阅教程移步&#xff1a;【保姆级】2024年最新Onlyfans订阅教程 Midjourney 订阅教程移步&#xff1a; 【一看就会】五分钟完成MidJourney订阅 GPT-4.0 升级教程移步&#xff1a;五分钟开通GPT4.0 如果你需要使用Wildcard开通GPT4、Midjourney或是Onlyfa…

哪些超声波清洗机值得买?百元内超声波清洗机值得买推荐

日常生活中&#xff0c;无论是精致的珠宝首饰、眼镜&#xff0c;还是日常使用的化妆刷、剃须刀等&#xff0c;难免会沾染灰尘与污垢&#xff0c;长久下来不仅影响外观&#xff0c;更可能对使用效果造成负面影响。而传统的手工清洁往往既费时又费力&#xff0c;且难以彻底清洁到…

2024年度最佳大型语言模型(LLMs)汇总

大型语言模型(LLMs)是人工智能文本处理的主要类型&#xff0c;也现在最流行的人工智能应用形态。ChatGPT是迄今为止最著名的使用LLM的工具&#xff0c;它由OpenAI的GPT模型的特别调整版本提供动力。但还有许多其他聊天机器人和文本生成器&#xff0c;包括从Google Bard和Anthro…

机器学习_正则化

文章目录 代价函数 如果我们有非常多的特征&#xff0c;我们通过学习得到的假设可能能够非常好地适应训练集&#xff08;代价函数可能几乎为 0&#xff09;&#xff0c;但是可能会不能推广到新的数据。 下图是一个回归问题的例子&#xff1a; 第一个模型是一个线性模型&#xf…

Anaconda下载以前的旧版本

由于Anaconda新的版本&#xff0c;可能不太适合我们当前开发&#xff0c;我们需要下载历史版本 访问Anaconda官网的历史版本下载页面: https://repo.anaconda.com/archive/

PostgreSQL开发与实战(7)多版本并发控制1

作者&#xff1a;太阳 一、 表系统字段几个比较重要概念 1.1 tuple tuple表示表中的数据行&#xff0c;在MySQL中用row表示。 在表数据页中&#xff0c;主要分为普通的数据元祖和TOAST元祖。以下是一个普通数据元祖的结构&#xff0c;主要由三部分组成&#xff1a;HeapTupl…

如何进行软件安全性测试?CMA、CNAS软件安全测试报告获取

软件安全性测试是保障软件应用安全的重要手段&#xff0c;通过对软件系统的安全性进行全面评估和检测&#xff0c;以确保软件能够抵御各种潜在的安全威胁和风险。那么如何进行软件安全性测试?CMA、CNAS软件安全测试报告又该如何获取呢? 软件安全性测试是一种基于黑盒测试的方…

数据可视化-ECharts Html项目实战(3)

在之前的文章中&#xff0c;我们学习了如何创建堆积折线图&#xff0c;饼图以及较难的瀑布图并更改图标标题。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢。 …

C#类型转换

C#类型转换 隐式类型转换 类型转换从根本上说是类型铸造&#xff0c;或者说是把数据从一种类型转换为另一种类型。在 C# 中&#xff0c;类型铸造有两种形式&#xff1a; 隐式类型转换 - 这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失。例如&#xff0c;从小的…

深入理解与实践AB测试:从理论到实战案例解析

一、引言 在互联网产品优化和运营策略制定中&#xff0c;AB测试&#xff08;也称为分组测试或随机化对照实验&#xff09;是一种科学且严谨的方法。它通过将用户群体随机分配至不同的实验组&#xff08;通常是A组和B组&#xff09;&#xff0c;对比不同版本的产品或策略对关键…

CMake+vcpkg+VS2022配置github上的cmake开源项目外部库

我们以采用 GitHub 上的开源库 cuda-bundle-adjustment 为例&#xff0c;其不能直接用vcpkg进行安装&#xff0c;只能通过cmake编译后链接到VS2022。 将 cuda-bundle-adjustment 库通过 CMake 编译链接到 Visual Studio 2022 步骤操作&#xff1a; 克隆存储库&#xff1a;使用…

【实验01 扩展实验】C#桌面项目:简易计算器

【实验要求】 &#xff08;1&#xff09;新建一个C#桌面项目Calc&#xff0c;实现简易计算器功能&#xff0c;界面如图1所示。 &#xff08;2&#xff09;计算方式&#xff1a;通过点击对应的按钮&#xff0c;输入第1个数&#xff08;可以是整数或实数&#xff09;&#xff0c…