git 版本管理工具 学习笔记

git 学习笔记

目录

一、git是什么

二、创建仓库

三、工作区域和文件状态

四、添加和提交文件

[五、回退版本 (了解)](#五、回退版本 (了解))

六、查看差异

七、删除文件

八、.gitignore文件(了解)

[九、github ssh-key配置](#九、github ssh-key配置)

十、本地仓库和远程仓库内容推送


一、git是什么

git是分布式主流版本管理控制系统

结合GitHub管理托管平台使用

使用一个叫仓库的数据库来控制文件的变化,仓库中的每个文件都有一个完整的版本历史纪录,可以看到提交者在什么时间修改了哪些文件的哪些内容,需要时可以回退历史版本

二、创建仓库

方式一:在自己的电脑本地直接创建一个仓库

创建一个作为项目仓库的文件夹 mkdir 文件夹名

然后进入该目录下 输入命令 :git init

或者在已有本地项目文件夹直接初始化

bash 复制代码
git init

出现以上回显语句,说明创建成功,而且,会多一个隐藏文件夹 .git

ls 看不到隐藏文件夹,要 ls -a 才能看到目录下所有文件夹

当然,可以直接初始化一个仓库,直接在命令后加上 仓库名,会直接生成对应文件夹

bash 复制代码
git init my-repo

方式二:从远程服务器上克隆一个已经存在的仓库

bash 复制代码
git clone github/gitee项目地址
例如:git clone https://github.com/jjw-DL/OpenPCDet-Noted.git

三、工作区域和文件状态

工作区:电脑里实际可以看到的目录

暂存区:也叫索引,用来临时存放未提交的内容,一般在.git目录下的index中

本地仓库:Git在本地的版本库,仓库信息存储在.git这个隐藏目录中

远程仓库:托管在远程服务器上的仓库,如github\gitlab\gitee

文件状态

已修改:修改了文件,但没有保存到暂存区

已暂存:把修改后的文件放到暂存库

已提交:把暂存区的文件提交到本地仓库

主要是以上三种,下两种较少提

(未跟踪):新建的还没有被git管理起来的文件

(未修改):已经被git管理起来,内容未被修改

下图为部分转换关系

四、添加和提交文件

bash 复制代码
git init   //创建仓库
git status   //查看仓库状态
git add   //添加到暂存区
git add *.后缀名  //添加一类文件到暂存区
git add .    //把当前文件夹下所有文件添到暂存区
git commit   //提交
git commit -m "message"  //提交所有暂存区的⽂件到本地仓库
git commit -am "message"  //提交所有已修改的⽂件到本地仓库
git log  //查看提交记录信息
git log --oneline  //查看提交历史,--oneline表示简介模式

ps:
git diff   //查看未暂存的⽂件更新了哪些部分
git diff <commit-id> <commit-id>   //查看两个提交之间的差异

git ls-files  //查看暂存区的文件

例如查看状态:

这是已经提交完成的状态

刚创建的未跟踪的文件是显示红色的

git add 可以使用通配符添加多个同后缀文件

例:下有四个红色未跟踪状态下的文件,txtsh都有

把以txt结尾的文件添加进暂存区,使用命令

bash 复制代码
git add   *.txt

运行命令后查看status状态 ,绿色表示在暂存区,红色表示在工作区未添加到暂存区

git commit只会提交暂存区中的文件,不提交工作区的文件

五、回退版本 (了解)

bash 复制代码
git reset 

git reset --soft   //工作区和暂存区都不清空
git reset --hard    //工作区清空  暂存区清空  
git reset --mixed    //工作区保留  暂存区清空  --默认此场景

例如下面三次提交:

下面是 git log查询的版本号

复制三份,用来熟悉三种参数操作

例:尝试soft回退:

查看提交历史:

退到第二次提交了

工作区文件还在,内容未变,暂存区文件也还在

查看状态,回到了第二次提交版本,此时 file3 还未提交,仍在暂存区,显示绿色

hard参数回退到上一版本:工作区暂存区file3都没了

mixed参数回退到上一版本:工作区还有,暂存区没了

六、查看差异

七、删除文件

bash 复制代码
rm <file> ;git add <file> //本地工作区删除文件,然后暂存删

git rm <file>   //从暂存区和工作区同时删除

git rm --cached <file>   //暂存区删除,保留在工作区中

git rm -r *   //递归删除某个目录下所有子目录和文件,删后提交下

ps:
git mv <file> <new-file>  //移动⼀个⽂件到新的位置

关于rm 后要add, 看到,单纯rm 后,暂存区并没删除,所以有git rm file这个命令,一次就好,

但还是记得 git commit 提交,不然,删除的文件在版本库中还是存在的

八、.gitignore文件(了解)

作用是让我们忽略掉一些不应该被加入到版本库中的文件,让仓库体积更小,更干净

九、github ssh-key配置

github建立仓库后,有https 和 ssh 两种方式的远程仓库地址,

https开头的方式在我们需要把本地代码push到远程仓库的时候,要验证账户和密码

git 开头的使用ssh协议,这种方式在推送的时候不需要验证用户名和密码,但需要在github上添加ssh公钥的配置,更安全

github 配置ssh密钥:

直接git clone 在github上的地址,发现报无法建立连接

键入:

bash 复制代码
ssh-keygen

回显密钥文件生成位置,直接回车,跳出设置二次验证密码,没必要,直接回车,再回车确认空填二次验证密码 ,如下图,成功

记事本打开公钥**.pub**文件,全选内容,复制

打开github 页面,头像处点击,进入settings,

左侧栏找到ssh and gpg keys ,进入,点击add keys

如图,可以取一个名字

可能会跳出验证github的账号密码,输入就行

可以测试一下连接,输入如下命令

bash 复制代码
ssh -T git@github.com

测试通过

总结:

十、本地仓库和远程仓库内容推送

再次克隆我们创建的github仓库,克隆成功

复习一下添加命令,以及推送到平台

进入仓库,创建个小文件,写入 hello

git add 添加到暂存区,git commit添加到本地仓库

此时,github还是看不到我们的hello.txt

因为没有从本地仓库推送到远程平台仓库

所以,执行 git push 命令

此时,刷新 github 仓库页面,发现已经推送成功

十、关联本地仓库和远程仓库

bash 复制代码
git remote add origin ....github仓库地址....
----------------------------
git branch -M mian   //指定分支名称为main
----------------------------
git push -u origin main  
//把本地的main分支和远程的origin别名的仓库的main分支关联起来
//其实,完整语句应该是:
//git push -u origin main:main
//如果本地分支和远程分支名字相同的话,就写一个main就行啦

----------------------------
git pull origin main
//远程仓库上在线修改了文件的话,或者其他人的本地仓修改了推上去,
//而我们在本地仓库要同步的话,需要拉取同步,这时要使用pull
//作用是把远程仓库的指定分支拉取到本地进行合并

以刚才例子做说明步骤

可以看到现在远程仓库对应别名就是 origin ,后面就是对应地址

push 具体例子上一节有

示范一下pull 操作

github 上在线新增一个 readme 文件

不输入别名 分支名 ,则默认仓库别名为origin ,分支为main

本地仓库新增了修改的新增readme文件

查看内容,一致

注意,执行完pull,会自动执行合并操作,如果远程仓库修改内容和本地仓的修改内容没有冲突的话,合并操作就会成功,否则会冲突失败,需要手动解决

fetch 命令也可以获取远程仓的修改,但不会自动合并,具体冲突问题在学习分支时再记录

小节总结:

2023.8.7

相关推荐
黑叶白树14 分钟前
简单的签到程序 python笔记
笔记·python
@小博的博客17 分钟前
C++初阶学习第十弹——深入讲解vector的迭代器失效
数据结构·c++·学习
幸运超级加倍~1 小时前
软件设计师-上午题-15 计算机网络(5分)
笔记·计算机网络
南宫生1 小时前
贪心算法习题其四【力扣】【算法学习day.21】
学习·算法·leetcode·链表·贪心算法
懒惰才能让科技进步2 小时前
从零学习大模型(十二)-----基于梯度的重要性剪枝(Gradient-based Pruning)
人工智能·深度学习·学习·算法·chatgpt·transformer·剪枝
love_and_hope2 小时前
Pytorch学习--神经网络--搭建小实战(手撕CIFAR 10 model structure)和 Sequential 的使用
人工智能·pytorch·python·深度学习·学习
Chef_Chen2 小时前
从0开始学习机器学习--Day14--如何优化神经网络的代价函数
神经网络·学习·机器学习
芊寻(嵌入式)2 小时前
C转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习
准橙考典3 小时前
怎么能更好的通过驾考呢?
人工智能·笔记·自动驾驶·汽车·学习方法
hong1616883 小时前
跨模态对齐与跨领域学习
学习