首页 > 其他分享 >Git基础使用

Git基础使用

时间:2024-07-18 11:28:04浏览次数:11  
标签:文件 git 仓库 基础 Git 提交 使用 我们 分支

目录

git的安装

初始化配置

新建仓库

工作区域与文件状态

 添加与提交文件

回退版本

对比差异

删除文件

忽略文件

 ssh配置

 关联本地仓库与远程仓库

分支简介与基本操作

解决合并冲突 

结语

 

Git是一个开源的分布式版本控制系统,由Linus Torvalds创建,用于有效、高速地处理从小到大的软件开发项目。

本文我们将学习git的基础使用。

git的安装

Windows下的安装

在Windows环境下我们可以访问git官网下载

Git (git-scm.com)

Linux下的安装

Linux下我们可以使用命令安装

sudo apt install git 

初始化配置

在完成安装后,Linux系统可以直接在命令行操作。Windows则需要在git Bash中操作。

在Window下右键,即可进入git Bash。

 我们可以对git进行一些简单的配置。

用户名配置:

git config --global user.name "username"

git:为了区分git命令与系统命令,git命令都会有git前缀。

config:表示配置git环境

--global:表示配置整个git环境

邮箱配置 :

git config --global user.email "邮箱"

 同样可以使用命令查看git的配置情况。

git config --global --list 

执行效果: 

新建仓库

首先我们需要一个空目录创建仓库,这里我们提前准备了一个目录gitlearn。我们可以使用 init 命令在当前目录来初始化一个新的Git仓库。

git init

​​

 我们使用ls命令查看当前目录

​​

可以看到当前目录多了一个 .git 隐藏目录,这个目录包含了Git仓库的所有必要文件和对象,它是Git跟踪项目历史和元数据的核心部分。

工作区域与文件状态

git的本地数据管理分为三个区域。

  • 工作区(Working Directory)

    这是项目目录中的普通文件和文件夹,你可以在这里修改、添加或删除文件。
  • 暂存区(Staging Area)

    通常指的是Git的索引(index),一个准备下次提交的文件列表,位于.git目录下的index文件中。
  • 本地仓库(Local Repository)

    这是.git目录,包含所有分支的提交历史、标签和引用

在git中文件有五种状态

  • 已修改(Modified):文件已经被更改,但还没有暂存。
  • 已暂存(Staged):对已修改文件的更改已经暂存,准备在下次提交时被包括进去。
  • 未跟踪(Untracked):文件是新添加的,Git尚未开始跟踪。
  • 已删除(Deleted):文件已经被删除,但这个删除操作还未提交。
  • 已删除(Deleted):文件已被删除,但这个更改需要暂存并提交才能记录在本地仓库中。

 添加与提交文件

我们可以使用 status 命令查看仓库的状态。

git status

我们新建一个file1.txt的文本文件,然后查看仓库状态。

可以看到仓库中有一个红色文件 file1.txt,红色表明 file1.txt 处于未跟踪状态。我们可以使用 add 命令将他提交到暂存区。

git add 文件名

可以看到在我们执行了add命令后 file1.txt 变为了绿色这表明文件已经存在了暂存区等待被提交。同时我们可以使用 rm 取消暂存。

git rm --cached 文件名

现在我们通过 commit 命令将文件提交。

git commit -m  "文件信息"

 这里我们使用 -m 选项简化操作,如果不使用-m,会调用终端的注释编辑器让你输入描述信息。

可以看到file1.txt 被成功提交,注意提交时只会提交暂存区文件,不会提交工作区文件。

add命令还支持使用通配符指定暂存文件,也可使用目录作为参数。

git add *.c    //暂存所有.c后缀文件。
git add .      //暂存当前目录所有文件。

回退版本

我们可以使用reset命令回退版本。

  • --soft

    • 只移动 HEAD(HEAD 是一个指针,指向当前分支的最新提交) 到指定的提交版本,不改变暂存区和工作目录。
    • 使用场景:如果你想要撤销一个提交,但保留所做的更改,以便重新提交。
  • --mixed( 默认选项):

    • 将 HEAD 和暂存区都重置到指定的提交,但不改变工作目录。暂存区中的更改会被清除。
    • 使用场景:如果你想要撤销一个提交以及其暂存区的更改,但保留工作目录中的更改。
  • --hard

    • 将 HEAD、暂存区和工作目录都重置到指定的提交。所有未提交的更改都会丢失。
    • 使用场景:如果你想要完全回到某个特定的提交状态,不保留任何未提交的更改。

我们可以使用 log 命令查看历史版本。

git log

我这里做了三次提交,第一次提交了file1.txt,第二次提交了file2.txt,第三次提交了file3.txt。

现在我们使用 reset 命令回退到上一次提交。

git reset --hard HEAD^   //^代表上一个版本

可以看到第三次提交消失,回退到了上一个版本,

使用查看当前工作区,file3文件也消失了。

如果不小心误操作也可以通过git reset回退到操作前的版本。我们使用 reflog 命令查看操作版本。

git reflog

我们可以根据提交ID进行回退。 

可以看到我们成功回退到第三次提交的版本。

对比差异

我们可以 diff 命令对比文件或目录的内容在不同版本之间的差异。

git diff

在不添加参数的时候,默认比较的是工作区与暂存区的差异。我们修改一下file3的内容。由空变为git。

可以看到git列出了file3的变化。通过设置参数 --cached 可以比较暂存区与仓库中的差异,如果参数是两个版本的提交ID,比较的则是不同提交之间的差异。 git buff 也可以比较不同分支的差异,这部分会在分支介绍。

删除文件

删除文件有两种方式,第一种直接删除工作区文件更新暂存区再提交到本地仓库。

第二种方法我们可以使用 rm 命令。

git rm 文件名

使用 rm 命令会同时删除暂存区与工作区文件。加上 --cached 参数后 会将文件从暂存区删除,但保留在工作区中。

忽略文件

在提交文件到仓库时有一些文件是不需要被提交的,我们可以设置 .gitignore 配置文件来忽略这些文件。 

.gitignore 每行一个模式,用来指定忽略的文件或目录。空白行会被忽略。以 # 开头的行是注释。.gitignore 也支持使用通配符,如 *.log 为忽略所有以 .log 结尾的文件。下面是一些简单的语法。

  • 忽略特定目录
  • build/ - 忽略 build 目录及其所有子目录和文件。
  • 忽略特定扩展名的文件
  • *.tmp - 忽略所有扩展名为 .tmp 的文件。
  • 排除规则
  • 如果你想从忽略中排除某些文件或目录,可以在模式前加上 !
  • !important.log - 不忽略名为 important.log 的文件。
  • 指定特定路径
  • dir/*.txt - 忽略 dir 目录下所有扩展名为 .txt 的文件。
  • 忽略所有 .git 文件
  • .git/ - 忽略 .git 目录下的所有文件。 

 注意:如果文件已经添加到了仓库,使用  .gitignore 无法忽略。我们简单演示一下。

我们新增了一个dir目录,目录下有一个 hello.c 的文件,同时新增了两个日志文件.log1.log 与 log2.log。我们查看一下本地仓库状态。

可以看到这些新增文件处于未跟踪状态。我们新增 .gitignore 文件,并忽略这些文件。 

再次查看仓库状态 ,可以看到指定文件已经被忽略。

 ssh配置

下面我们来介绍远程仓库的使用,首先我们需要一个github或者gitee的账号,然后我们需要在本地创建一个ssh的key,因为github/gitee是使用ssh服务进行通讯的。可以使用下面的命令创建一个密匙。

ssh-keygen -t rsa -C "样例"

-t:指定密钥类型,默认是 rsa ,可以省略。
-C:设置注释文字,比如邮箱。
-f :指定密钥文件存储文件名,一般我们默认,让存储到默认路径以及默认文件名

执行命令后git会要求输入生成的sshkey文件名,我们可以回车使用默认文件名

然后会让你输入密码,这里我们输入回车表示空密码,输入密码后,系统会再次要求你确认密码。确认无误后,密钥生成完成。

 生成的ssh文件如果不使用-f指定的话会生成在用户目录下的.ssh目录中,.ssh是隐藏文件,可以使用ls -ah看到,使用cd ~进入用户主目录,然后cd进入到.ssh目录中可以看到文件

 

可以看到.ssh目录生成了很多文件其中,id_rsa与id_rsa.pub是我们刚刚生成的密匙。 id_rsa是私匙,id_rsa.pub是公匙,我们需要打开公钥文件,然后复制公钥中的内容。然后我们打开gitee/github,我这里使用gitee演示,打开账户设置。

选择ssh公匙,接着添加我们的公钥。

接着输入账号密码,我们的ssh就配置成功了。

 关联本地仓库与远程仓库

我们这里介绍两种操作,将远程仓库克隆到本地,与关联本地仓库到远程仓库。

将远程仓库克隆到本地

我们在gitee上创建一个远程仓库。

 

现在我们有了一个远程仓库,我们可以通过 git clone 命令克隆远程仓库到本地。

git clone 仓库地址

可以看到克隆成功后目录下多了一个gitlearn目录,这就是我们克隆下来的远程仓库。 

我们在本地仓库中新建一个文件并提交。

可以看到本地仓库多了一个文件,我们再来看看远程仓库,可以看到远程仓库还是空的。

 git是一种分布式版本控制系统,我们的本地仓库与远程仓库其实是两个仓库,如果需要将修改同步,我们需要使用 pull 与 push 指令。

git push 将本地仓库的代码推送到远程仓库。
git pull 从远程仓库获取最新版本的代码

我们执行一下push指令。 

可以看到本地仓库同步到了远程仓库。 

将本地仓库关联到远程仓库 

 现在我们学习如何将本地仓库关联到远程仓库,首先新建一个仓库。

之前的学习中我们创建了一个 gitlearn 本地仓库,现在我们将这个仓库关联到远程仓库。 我们可以使用以下命令

git remote add 自定义仓库名 仓库路径

 简单执行一下命令。

可以看到远程仓库同步了本地仓库的文件与提交信息。 在本地仓库中可以使用以下命令查看本地仓库关联的仓库地址。

git remove -v

分支简介与基本操作

在Git中,分支是管理代码变更的一种方式。每个分支代表一个独立的开发线,你可以在分支上进行开发、测试和修复,而不会影响主分支。

我们可以使用 branch 命令创建一个分支

git branch 分支名

branch 命令也可以显示当前项目所有分支。现在我们创建一个分支 dev。

我们可以使用 switch 命令切换到 dev 分支。

git switch 分支名

现在我们在 dev 分支创建一个文件。主目录中有一个main.txt文件。

我们切换到主分支。 可以看到主分支只有main文件。

合并分支 

 我们可以使用 merge 将指定分支合并到当前分支。

git merge 分支名

 现在我们将 dev 分支合并到 master 分支。

可以看到 dev.txt 文件被合并到了 master 分支。合并后原分支不会消失,需要手动删除。

git branch -d 分支名  //删除已合并的分支
git branch -D 分支名  //强制删除分支

解决合并冲突 

当两个分支对同一文件的同一行或段落进行了不同的修改,我们合并时就会发生冲突,需要手动选择合并更改。Git会用<<<<<<<, =======, 和 >>>>>>> 标记冲突区域。

我们新建了一个仓库,我们有两个分支,mater分支中 main.txt 文件的内容是 test master ,dev 分支中 main.txt 中内容是 test  dev。现在我们合并两个分支。

执行合并命令后合并失败,我们需要手动保留内容,然后提交完成合并。

我们手动提交完成合并。

结语

到这里我们已经完成了git的学习。笔者能力有限,如有错漏之处,欢迎指正。同时很多命令只是讲了基础用法,如果大家想要深入学习可以参考git 官方文档。感谢观看!

标签:文件,git,仓库,基础,Git,提交,使用,我们,分支
From: https://blog.csdn.net/2301_80926085/article/details/140422209

相关文章

  • 【2024版】超详细Python+Pycharm安装保姆级教程,Python+Pycharm环境配置和使用指南,看完
    目录一、Python开发环境配置1.Python下载与安装二、PyCharm安装+运行测试+汉化1.PyCharm下载及安装2.解释器配置及项目测试3.PyCharm汉化本文将从Python解释器安装到Pycharm专业版安装和配置汉化等使用都进行了详细介绍,希望能够帮助到大家。Python解释器&Pycharm安......
  • sqlalchemy中relationship使用
    sqlalchemy是python做orm管理的非常重要的工具,sqlalchemy2.0版本relationship与上个版本有所不同,具体如下:fromsqlalchemyimportcreate_enginefromsqlalchemy.ormimportsessionmakerfromsqlalchemy.ormimportdeclarative_baseSQLALCHEMY_DATABASE_URL='你的数据库......
  • 深入探讨:使用 Spring AOP 实现 Lock4j 的声明式和编程式分布式锁
    深入探讨:使用SpringAOP实现Lock4j的声明式和编程式分布式锁在现代分布式系统中,分布式锁是一个非常重要的概念。它可以帮助我们在多个节点之间协调资源访问,防止数据不一致和竞争条件。今天,我们将深入探讨如何使用Lock4j和SpringAOP来实现声明式和编程式的分布式锁。什......
  • 使用Spring Boot AOP和自定义注解优雅实现操作日志记录
    使用SpringBootAOP和自定义注解优雅实现操作日志记录大家好,今天我们来聊聊如何在SpringBoot项目中,通过AOP(面向切面编程)和自定义注解,优雅地实现操作日志记录。操作日志对于系统的可维护性和安全性至关重要,它能帮助我们追踪用户行为,排查问题。什么是AOP?AOP,全称Aspect-Oriented......
  • 使用Spring Boot实现图形验证码:从零开始的详细教程
    使用SpringBoot实现图形验证码:从零开始的详细教程在现代Web应用中,图形验证码是一种常见的防止机器人和恶意攻击的手段。今天,我们将深入探讨如何在SpringBoot项目中实现图形验证码。通过这个教程,你将学会如何生成和验证图形验证码,并将其集成到你的SpringBoot应用中。一、项目......
  • Java使用流实现浏览器自动下载文件(附前端请求代码)
    一、注意事项1.需要注意后端的响应头设置,告诉浏览器下载文件类型(Content-Type)以及文件名称。2.不同环境下中文路径以及文件名会出现乱码情况路径解决:filePath=newString((filePath).getBytes("ISO8859-1"),"UTF-8");文件名解决:response.setHeader("Content-Dispositi......
  • 【Web服务与Web应用开发】【C#】VS2019 创建ASP.NET Web应用程序,以使用WCF服务
    目录0.简介1.环境2.知识点3.详细过程1)创建空项目2)添加Web表单3)使用Web表单的GUI设计4)添加服务引用5)在Web的button函数中调用服务,获取PI值6)测试0.简介本文属于一个系列中的第二篇文章,这个系列会实现一个项目,这个项目主要使用VisualStudio2019作为开发工具,创建WC......
  • 七、python函数基础
    文章目录学习目标一、函数的介绍二、函数的参数三、函数的返回值四、函数的注释五、函数调用函数六、函数高级6.1全局变量和局部变量6.2函数多个返回值6.3默认参数的使用6.4可变参数的使用6.5可变数据类型和不可变数据类型6.6函数的注意事项......
  • iOS开发基础129-音频录制上传
    在Objective-C中,音频录制过程涉及几个关键步骤,包括配置录音设置、创建和启动录音机、处理录音会话以及将录制的音频文件上传到服务器。下面是一个详细的示例,包括创建一个简单的音频录制应用,以及将录制的音频文件上传到服务器的代码。1.设置音频会话我们需要使用AVFoundation框......
  • java 使用mybatis时 模糊查询
    有两种方法,分别是直接字符串拼接,使用mybatis的bind函数绑定再查方法1<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"&g......