git笔记-简单入门

git笔记

git是一个分布式版本控制系统,它的优点有哪些呢?分为以下几个部分

  1. 与集中式的版本控制系统比起来,不用担心单点故障问题,只需要互相同步一下进度即可。
  2. 支持离线编辑,每一个人都有一个完整的版本库。
  3. 跨平台支持
  4. 性能高效

安装和初始化配置

git的安装方式有方式

  1. 带GUI的git,带有图形化界面
  2. 命令行安装

个人比较推荐命令行安装的方式,我采用的是centos 7.x的系统

  • 添加 CentOS/RHEL 7 存储库
sudo yum -y install https://packages.endpointdev.com/rhel/7/os/x86_64/endpoint-repo.x86_64.rpm
  • yum安装git
sudo yum install git -y

初始化git

  1. 配置用户名
git config --global user.email '你的邮箱'
  1. 配置邮箱
git config --global user.email '你的密码'

创建仓库

在git中,创建仓库有两种方式

  1. 使用git init
git init
  1. git init reop name
git init name
  1. 从gitee/github已有的仓库,创建仓库(使用clone的方式)
git clone git@gitee.com:tmeermer/hnys.git

工作区和文件状态

提交流程.png

git有三个工作区域分为工作区,暂存区,本地仓库。现在来简单解释一下这三个区域

工作区:当前的工作目录,所有的操作都在这里进行

暂存区:工作区完成工作后,将产生的文件推送到暂存区,临时保存这些文件。可以理解为一个临时的杂货铺

本地仓库:这里存放最终的成品,也就是仓库。

添加和提交文件

  1. 添加文件
git add filename

添加时后面需要添加文件名,也可使用通配符进行批量提交

git  add *.txt 

现在该命令就只会提交以txt为后缀的文件了,当然也可以使用.来提交当前文件夹下的所有文件

git add .
  1. 提交文件
git commit -m "这是第一次提交"
  • -m参数的含义是说明此次提交的主要信息,如果不加上m参数,git会默认打开vim编辑器,来输入提交的信息
  1. 查看提交状态
git status;

查看提交状态.png

其中查看提交日志的命令是

git log 

也可以加上参数查看简洁的提交日志

git log --oneline

提交日志.png

其中有邮箱和名称,都是通过我们之前使用的config命令来配置的。

git reset 回退版本

在日常开发的时候,我们通常都有进行版本回退的需求。就可以使用reset这个命令以下是它的每个参数含义

gitrerset.png

soft参数的含义是:回退到某一次的提交位置,但是工作区和暂存区的内容是保存的

·hard·参数的含义是:回到某一次的提交位置,但是工作区和暂存区的内容全部丢弃

mixed参数介于sort和hard中间,工作区的内容保留但是暂存区的内容删除

soft测试

现在来测试soft参数的命令产生的作用

echo "file1" > file1.txt
echo "file2" > file2.txt
echo "file3" > file3.txt

三个文件.png

现在创建了三个txt的文件并且使用了以下命令进行提交,分为三次

git add file1.txt
git commit -m "第一次提交"
git add file2.txt
git commit -m "第二次提交"
git add file3.txt
git commit -m "第三次提交"

查看提交结果

三次提交.png

现在是已经有三次提交了,现在回退到第二次提交 7b6b999

git reset --soft 7b6b999

回退第二次.png

可以发现真的回退到了第二次提交这个位置,而且暂存区和工作区的文件都没有被丢弃

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在提交的过程中出现了nothing to commit, working tree clean问题,原因是:

暂存区没东西获或者东西都提交到版本库中的当前分支,且工作区

中的文件都被git跟踪了(都git add .

解决方案:修改需要提交的文件中的任何一处(空格都行),然后重新add,commit。

hard测试

现在来测试hard参数会产生什么样的效果,分为了三个文件夹进行测试

echo "file1" > file1.txt
echo "file2" > file2.txt
echo "file3" > file3.txt

先创建三个txt文件,都进行依次提交

git add file1.txt 
git commit -m "这是第一次提交"
git add file2.txt 
git commit -m "这是第二次提交"
git add file3.txt 
git commit -m "这是第三次提交"

hard三次提交.png

进行回退操作,回退至d7a1e8a

hard测试.png

测试发现,暂存区和工作区的文件的file3.txt都被丢弃了。

hard参数的话,需要慎用!

mixed测试

现在来测试mixed参数,还是添加三个txt文件

echo "file1" > file1.txt
echo "file2" > file2.txt
echo "file3" > file3.txt

依次进行提交

git add file1.txt 
git commit -m "这是第一次提交"
git add file2.txt 
git commit -m "这是第二次提交"
git add file3.txt 
git commit -m "这是第三次提交"

进行回退操作,回退至第二次提交:d02077e

git reset --mixed d02077e

查看暂存区和目录下的文件状态

mixed测试.png

可以发现工作区的文件还在,但是暂存区的不存在了,此时HEAD指针指向了第二次提交的位置。

git diff 查看差异

当需要查看工作区和暂存区的内容是否有差异时,需要使用以下命令查看差异

git diff

git diff.png

需要查看之前任意的几个版本的差异

git diff HEAD~X HEAD

也可直接使用来查看最后一个版本之前的差异

git diff HEAD
git diff HEAD~ HEAD

还可以在后面加上文件名,只查看该文件的差异

git diff HEAD~1 HEAD file2.txt

每次提交都有一个哈希值,也可以使用这个值来判断这两次提交之间的差异

git diff d7a1e8a 9a857be

差异.png

使用git rm 删除文件

在使用git时,想删除本地工作区和暂存区的文件时,如果使用Linux的系统命令的话会比较麻烦

rm file1.txt

rm删除.png

删除完查看状态,可以发现在工作区的文件已显示被删除了,还需要使用以下命令来更新,这里的提交是要告诉暂存区,在下一次提交的时候file1.txt已经被删除了!

git add .
git commit -m "delete file1.txt"

rm删除后更新.png

但是git给我们提供了 git rm 命令,可以让操作变得更简单

git rm file

测试一下、

git rm file2.txt

girm删除.png

这次可以发现,暂存区和工作区都同步被删除了,这就是 git rm命令的作用。

gitrm总结.png

.gitgnore忽略文件

这个文件的作用是,让我们忽略掉一些不应该加入到版本库中的文件,这样可以让我们的版本库变得更加干净和更小

忽略文件.png

这是我们需要忽略的文件,以免带来不必要的风险

现在向我们的本地仓库中添加.gitignore文件

echo "acess.log" > .gitignore
vim .gitignore
// 添加如下内容
access.log
*.log

添加到暂存区

git add .

提交到本地仓库

git commit -am "full submit"

查看效果

忽略文件测试.png

可以发现我们创建的日志文件并没有被提交到缓存区。

如果打算要忽略全部的日志文件,可以参考以下写法

*.log
# 忽略temp目录下的文件
temp/

关联本地仓库和远程仓库

之前演示的都是本地仓库进行的提交和各种测试,但是在实际的生产环境中往往都是需要连接到远程仓库进行提交和各种其他操作。但是先决条件是配置好了ssh密钥,平台可以选择github/gitee。其中gitee相当于国内的gihub,速度较快。

  • 登录gitee设置ssh公钥(已省略,具体步骤可自行查阅)

网址:gitee

  • clone远程仓库到本地,并且同步提交到远程的master分支
git remote -v 查看有没有远程仓库
git init .
git clone git@gitee.com:tmeermer/c-language-practice-code.git
//注:项目地址形式为:https://gitee.com/xxx/xxx.git或者 git@gitee.com:xxx/xxx.git
git add .
git commit -m "commit"
git push origin master 
将本地的master分支推送到远程的master分支,如果不存在则会覆盖

提交到远程.png

分支管理

git中的分支可以看作一棵树上的枝干,最粗壮的是主分支,其他分支都是从分支。git中的主分支叫做master,通常主分支都是用来发布重大更新的,其他开发和测试的过程都是在开发分支上完成的。测试通过后才会合并进主分支。

  1. git如何查看当前分支?
git branch
  1. git如何创建分支?
git checkout dev
git status
  1. git中如何切换分支?
git checkout branch--name
  1. git中如何合并分支?
git memger branch--name
  1. git中如何删除无用的分支?
git branch -d branch--name

git解决合并冲突

现在来模拟两个两个分支修改了同一处的情况,这样会导致git发生合并冲突,从而合并失败

冲突模拟.png

在以上操作中,我们在两个分支中提交了一样的内容,导致了冲突。

git init myproject# 创建master分支
git checkout -b master# 向文件内写入内容
echo "This is a line added in feature-branch." > example.txtvim example.txt
```
"This is a line added in feature-branch."
测试
```
git add .
git commit -m "feat commit "# 创建feat-branch 分支
git checkout -b feat-branchvim example.txt
```
"This is a line added in feature-branch."
测试
```
git add .
git commit -m "feat commit "git checkout mastergit merge master# 合并分支失败
git status 

git冲突.png

现在解决冲突需要修改

切换到master分支git checkout master
vim example.txt找到冲突的行修改的行进行修改git add .
git commit -m "commit this a master"切换到feat分支
git checkout feat-branch 
修改冲突的位置
git add .
git commit -m "commit this a feat-branch"最后合并冲突
git merge master

解决冲突.png

以上就是如何解决git分支冲突的方法。

回退和rebase

分支的合并可以使用git merge 命令来进行合并,并且还会保存所有的提交记录。git 还有另一种合并分支的方式就是使用rebase

git rebase feat-branch

rebase的翻译叫做变基,在git中我们可以这么理解

首先rebase只能在主分支上提交吗?其实不是的

它可以在任意分支上执行,如果是在main分支上执行

git rebase dev

则main上的提交记录会变基到dev分支的末尾

如果是在dev分支上提交

git rebase main

dev的两条提交记录都会变基到Main分支上。只是顺序不同罢了

gitrabase.png

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Chapter2 Amplifiers, Source followers Cascodes

Chapter2 Amplifiers, Source followers & Cascodes MOS单管根据输入输出, 可分为CS放大器, source follower和cascode 三种结构. Single-transistor amplifiers 这一章学习模拟电路基本单元-单管放大器 单管运放由Common-Source加上DC电流源组成. Avgm*Rds, gm和rds和…

LabVIEW透镜多参数自动检测系统

在现代制造业中,提升产品质量检测的自动化水平是提高生产效率和准确性的关键。本文介绍了一个基于LabVIEW的透镜多参数自动检测系统,该系统能够在单一工位上完成透镜的多项质量参数检测,并实现透镜的自动搬运与分选,极大地提升了检…

K8S集群部署--亲测好用

最近在自学K8S,花了三天最后终于成功部署一套K8S Cluster集群(masternode1node2) 在这里先分享一下具体的步骤,后续再更新其他的内容:例如部署期间遇到的问题及其解决办法。 部署步骤是英文写的,最近想练…

PHP实现混合加密方式,提高加密的安全性(代码解密)

代码1&#xff1a; <?php // 需要加密的内容 $plaintext 授权服务器拒绝连接;// 1. AES加密部分 $aesKey openssl_random_pseudo_bytes(32); // 生成256位AES密钥 $iv openssl_random_pseudo_bytes(16); // 生成128位IV// AES加密&#xff08;CBC模式&#xff09…

Linux - 进程间通信(3)

目录 3、解决遗留BUG -- 边关闭信道边回收进程 1&#xff09;解决方案 2&#xff09;两种方法相比较 4、命名管道 1&#xff09;理解命名管道 2&#xff09;创建命名管道 a. 命令行指令 b. 系统调用方法 3&#xff09;代码实现命名管道 构建类进行封装命名管道&#…

C语言 --- 分支

C语言 --- 分支 语句分支语句含义if...else语句单分支if语句语法形式 双分支 if-else 语句语法形式 悬空else含义问题描述 多分支 if-else 语句语法形式 switch...case语句含义语法形式 总结 &#x1f4bb;作者简介&#xff1a;曾与你一样迷茫&#xff0c;现以经验助你入门 C 语…

SSRF 漏洞利用 Redis 实战全解析:原理、攻击与防范

目录 前言 SSRF 漏洞深度剖析 Redis&#xff1a;强大的内存数据库 Redis 产生漏洞的原因 SSRF 漏洞利用 Redis 实战步骤 准备环境 下载安装 Redis 配置漏洞环境 启动 Redis 攻击机远程连接 Redis 利用 Redis 写 Webshell 防范措施 前言 在网络安全领域&#xff0…

Spring Boot - 数据库集成06 - 集成ElasticSearch

Spring boot 集成 ElasticSearch 文章目录 Spring boot 集成 ElasticSearch一&#xff1a;前置工作1&#xff1a;项目搭建和依赖导入2&#xff1a;客户端连接相关构建3&#xff1a;实体类相关注解配置说明 二&#xff1a;客户端client相关操作说明1&#xff1a;检索流程1.1&…

深度学习之“线性代数”

线性代数在深度学习中是解决多维数学对象计算问题的核心工具。这些数学对象包括标量、向量、矩阵和张量&#xff0c;借助它们可以高效地对数据进行操作和建模。以下将详细介绍这些数学对象及其在深度学习中的典型用途。 数学对象概述 标量 标量是最简单的数学对象&#xff0…

使用PyQt5绘制带有刻度的温度计控件

前言&#xff1a;进入学习Python开发上位机界面的第二阶段&#xff0c;学习如何开发自定义控件&#xff0c;从常用的控件入手学习&#xff0c;本期主要学习如何使用PyQt5绘制带有刻度的温度计控件。 1. 先找到一篇参考文章 参考文章&#xff1a;Qt编写自定义控件5-柱状温度计…

问deepseek,如何看待ai降低学习成本而导致软件开发岗位需求降低,和工资下降。 软件从业人员何去何从?

它给我的回答是这样的&#xff1a; 思考逻辑 嗯&#xff0c;用户问的是AI如何降低学习成本&#xff0c;进而导致软件开发岗位需求减少和工资下降&#xff0c;以及软件从业人员该怎么办。这个问题挺复杂的&#xff0c;我得先理清楚各个部分。首先&#xff0c;AI确实在改变很多行…

Error: Expected a mutable image

你的函数用了不支持的图片格式比如我的人脸检测&#xff0c;本来要RGB565我却用JPEG所以报错

海思ISP开发说明

1、概述 ISP&#xff08;Image Signal Processor&#xff09;图像信号处理器是专门用于处理图像信号的硬件或处理单元&#xff0c;广泛应用于图像传感器&#xff08;如 CMOS 或 CCD 传感器&#xff09;与显示设备之间的信号转换过程中。ISP通过一系列数字图像处理算法完成对数字…

2.攻防世界PHP2及知识点

进入题目页面如下 意思是你能访问这个网站吗&#xff1f; ctrlu、F12查看源码&#xff0c;什么都没有发现 用kali中的dirsearch扫描根目录 命令如下&#xff0c;根据题目提示以及需要查看源码&#xff0c;扫描以php、phps、html为后缀的文件 dirsearch -u http://61.147.17…

线性数据结构:单向链表

放弃眼高手低&#xff0c;你真正投入学习&#xff0c;会因为找到一个新方法产生成就感&#xff0c;学习不仅是片面的记单词、学高数......只要是提升自己的过程&#xff0c;探索到了未知&#xff0c;就是学习。 目录 一.链表的理解 二.链表的分类&#xff08;重点理解&#xf…

【AI】探索自然语言处理(NLP):从基础到前沿技术及代码实践

Hi &#xff01; 云边有个稻草人-CSDN博客 必须有为成功付出代价的决心&#xff0c;然后想办法付出这个代价。 目录 引言 1. 什么是自然语言处理&#xff08;NLP&#xff09;&#xff1f; 2. NLP的基础技术 2.1 词袋模型&#xff08;Bag-of-Words&#xff0c;BoW&#xff…

书生大模型实战营7

文章目录 L1——基础岛提示词工程实践什么是Prompt(提示词)什么是提示工程提示设计框架CRISPECO-STAR LangGPT结构化提示词LangGPT结构编写技巧构建全局思维链保持上下文语义一致性有机结合其他 Prompt 技巧 常用的提示词模块 浦语提示词工程实践(LangGPT版)自动化生成LangGPT提…

一个开源 GenBI AI 本地代理(确保本地数据安全),使数据驱动型团队能够与其数据进行互动,生成文本到 SQL、图表、电子表格、报告和 BI

一、GenBI AI 代理介绍&#xff08;文末提供下载&#xff09; github地址&#xff1a;https://github.com/Canner/WrenAI 本文信息图片均来源于github作者主页 在 Wren AI&#xff0c;我们的使命是通过生成式商业智能 &#xff08;GenBI&#xff09; 使组织能够无缝访问数据&…

41. 缺失的第一个正数

参考题解&#xff1a;https://leetcode.cn/problems/first-missing-positive/solutions/7703/tong-pai-xu-python-dai-ma-by-liweiwei1419 难点在于时间复杂度控制在O(n)&#xff0c;空间复杂度为常数级。 哈希表时间复杂度符合&#xff0c;但是空间复杂度为O(n) 排序空间复杂…

深入核心:一步步手撕Tomcat搭建自己的Web服务器

介绍&#xff1a; servlet&#xff1a;处理 http 请求 tomcat&#xff1a;服务器 Servlet servlet 接口&#xff1a; 定义 Servlet 声明周期初始化&#xff1a;init服务&#xff1a;service销毁&#xff1a;destory 继承链&#xff1a; Tomcat Tomcat 和 servlet 原理&#x…