Git小白入门教程

Git小白入门教程

⭐️本篇blog 是b站 【【GeekHour】一小时Git教程】的学习记录笔记,感觉真的很不错~ 为了继续后一步的学习,我也记录一下~ 大家也可以去看看这个视频,很详细!

在这之前你得先 安装一下Git然后才能开始使用它~

🙋首先明确一下什么是Git
🍎 Git 是一个流行的软件开发版本控制系统。它允许在存储库(repo)中管理代码的不同版本~ 提供远程仓库和本地仓库 是项目合作管理 记录学习代码等的必备工具!
🍌Git中本地仓库 和 远程仓库 两者也可以相互关联 下面就分别介绍本地仓库的管理命令和远程仓库的管理命令

🌿本blog主要是记录一些常用的Git命令~ 学习完这些基本就够用啦~
🚀建议大家需要边操作边学习 熟练起来 Git真的是程序员必备的一个工具的存在!
🌞对于后期的话,大家熟练了Git的原理之后,可以使用图形化的工具,比如VScode GitKraken等等等
b站 GitKraken教学


☘️首先在学习之前,建议美化一下git-bash终端~更好看 ~ 美化(当然不美化也没关系哈哈哈哈)

🐋对于powershell 的美化安利下面几个blog 真的亲测有效果~

blog1
scoop scoop工具
blog2

本地仓库的常用命令

1.安装和配置

你可以在任意的位置,比如D盘 learn-git目录下,右键点击 然后Git Bash here
在这里插入图片描述

image-20231202104524032

//注意用户名如果有空格要用双引号括起来 没有的话就不用
//这里主要是进行配置一下用户的基本信息  不配置也不影响使用
git config --global user.name "xi_guang"
git config --global user.email xx@qq.com
git config --global credential.helper store//用来保存用户名和密码 这样就不用每次都输入了
git config --global --list//查看配置的信息

配置完了大概就长这样

image-20231202155206063

2.新建仓库

//创建本地仓库
git init  //在当前目录创建仓库
git init my-repo//创建一个名为 my-repo的仓库    
//也可以从远程服务器上克隆一个已经存在的仓库 后面会说
 
ls -a //显示所有文件 .git是隐藏目录 所以要用-a来显示所有目录
ls -altr//源自于下文扩展中的部分,git仓库具体的文件和目录 
    

创建本地仓库

image-20231202160343971

image-20231202191153165

远程克隆仓库

image-20231202191539745

一些基本的Linux命令 的拓展
//ls命令
ls -l                   //以长格式显示当前目录中的文件和目录
ls -a                   // 显示当前目录中的所有文件和目录,包括隐藏文件
ls -lh                   //以人类可读的方式显示当前目录中的文件和目录大小
ls -t                   //按照修改时间排序显示当前目录中的文件和目录
ls -R                   //递归显示当前目录中的所有文件和子目录
ls -l /etc/passwd    //显示/etc/passwd文件的详细信息
==================
// 关于删除命令
rm  -rf  要删除的文件名或目录//删除当前目录下的所有文件及目录,并且是直接删除,无需逐一确认命令行为

//删除文件名 test.txt:
rm  -rf   test.txt
//删除目录 test,不管该目录下是否有子目录或文件,都直接删除:
rm  -rf   test/    

==============
cp -rf repo repo-soft//把repo这个文件复制 重命名为 repo-soft
   
//echo 命令
echo "hello" >hello.txt //创建一个内容为hello的文件hello.txt //如果用一个>表示创建一个文件 覆盖当前的空白内容 如果该文件之前已经有了 就会覆盖 
   
echo "hellohello" >>hello.txt//文件hello.txt 追加内容hellohello 
echo "helo" >tmp/hello.txt//在tmp文件夹中创建一个hello.txt的文件

3.工作区域和文件状态

工作区 Working Directory

git add ↓

暂存区 Staging Area/Index

git commit ↓

本地仓库 Local Repository

image-20231202192002964

4.添加和提交文件

git status//查看仓库的状态
 =====================
git add file.txt//file.txt添加到暂存区
git add *.txt //把所有工作区的文件通配符后缀为.txt的文件都提交到暂存区里
git add .//把当前文件的所有文件都添加到暂存区
    
git rm --cached file.txt//file从暂存区重新回收到工作区
====================== 

    
git commit//只会提交暂存区中的文件而不会提交工作区中的其他文件

    
//注意 git commit 需要用-m来指定提交时的信息 否则会进入vim界面
  //vim界面 vim是文件编辑器
    i 进入编辑模式
    Esc 退出回命令模式
    :wq 保存退出
        
git commit -m "第一次提交" //把暂存区里面的文件全部提交到仓库区 交互信息为:第一次提交
git commit -am "第一次提交" //一次完成添加暂存和提交两个动作
 ===============
 git log //查看提交记录
 git log --oneline //查看简介的提交信息
==============
git ls-files //查看仓库里的文件
查看仓库的状态 git status

🌿
image-20231202192221270

在该目录下创建一个文件

image-20231202192421874

查看文件内容

image-20231202192521560

下面可以再看一下状态

image-20231202192643059

添加到暂存区​

🌱
image-20231202193243669

提交到仓库 git commit m “ 输入内容”

🌴
image-20231202194827302

查看提交记录 git log

🌲
image-20231202195155903

查看简介的提交信息

image-20231202195437260

5.git reset 回退版本

回退版本 回退到某一个版本

image-20231202195717903

方便理解:

我们分了三次提交 三个文件

image-20231202200241169

这个适合想要回退到上一个版本的话,就需要使用git reset命令

git reset – –soft

image-20231202200900847

用soft 参数回退到了上一个版本: 工作区和暂存区的内容都 不会 被清空

image-20231202201256369

而file3是第三个版本(第三次)才添加的,所以对于第二个版本来说,file3文件就是一个新的文件。这个时候可以修改file3里面的内容,然后重新添加暂存和提交就可以了

git reset – – hard HEAD^

image-20231202201638751

用hard 参数回退到了上一个版本: 工作区和暂存区的内容都 会 被清空c

git reset --hard b4d139 //将仓库回退到某一时间点
git reset –mixed HEAD^

image-20231202202104234

用mixed 参数回退到了上一个版本: 工作区的内容不会被清空 暂存区的内容 会 被清空

误操作了怎么办
git reflog //查看操作的历史记录 找到误操作之前的版本号
//然后 回退一下到原来的版本

image-20231202211655499

git reset --hard +要回退到的版本号image-20231202211736724

6.git diff 查看差异

1️⃣查看工作区 暂存区 本地仓库之间的差异

2️⃣查看不同版本之间的差异

3️⃣查看两个分支之间的差异

git diff //后面什么都不加默认 工作区和暂存区之间的差异 显示发生更改的文件以及更改的详细的信息
git diff HEAD//比较工作区和版本库之间的差异
git diff --cached   // 比较暂存区和版本库之间的差异
git diff 版本号ID  版本号ID//比较两个版本之间的差异
//HEAD 指向分支的最新提交节点
git diff 版本提交ID HEAD  //当前版本号和HEAD之间的差异
git diff HEAD~ HEAD//比较当前版本和上一版本之间的差异
git diff HEAD~3 HEAD//比较当前版本和上3个一版本之间的差异
git diff HEAD~3 HEAD file3.txt//比较file3.txt 当前版本和上3个一版本之间的差异

举个🌰

比如原来的仓库状态 和文件内容

image-20231202212755895

image-20231202212820599

修改file3.txt的内容后 用git diff 查看一下

git diff 不加任何东西 比较的是工作区和暂存区之间的差异 由于我们在工作区进行修改了file3.txt 所以会存在差异

image-20231202213256542

如果没有任何内容就是说工作区和暂存区 是相同的 没有差异 就不会返回值

总结

image-20231202220703366

7.git rm 删除文件

//方法一
git rm file2.txt//把工作区和暂存区中的file2.txt文件一起删除
//!!同时记得提交 否则删除的文件在版本库中还是存在的
    
//方法二
//先从工作区删除  然后再从暂存区删除
rm file2.txt
git add file2.txt

git rm --cached file1.txt //从暂存区和版本库中删除 但是保留在工作区

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

image-20231203094550828

8.忽略文件

忽略掉一些不应该被加入到版本库中的文件,起到节约内存的作用

系统或者软件自动生成的文件
编译产生的中间文件和结果文件
运行时生成日志文件、缓存文件、临时文件
涉及身份、密码、口令、秘钥等敏感信息文件

忽略日志文件和文件夹

忽略所有.class文件

忽略所有.o文件

忽略所有.env文件

忽略所有.zip和tar文件

忽略所有.pem文件

echo file1.log > .gitignore
//把file1.log添加到.gitignore文件 这样就不会显示file1.log的具体内容了(看不见啦)
//编辑.gitignore的内容 增加 *.log 就可以把所有.log文件写入gitignore  也就是相当于忽略了所有的log 文件  但是需要注意的是 只对暂存区和工作区的文件有效 对于已经提交到仓库里的文件是没有效果的
vi .gitignore//通过vim编辑gitignore文件的内容即可

.gitignore可以忽略通配符 文件夹等的内容

忽略通配符:*.log

忽略文件夹 文件夹名称/ 比如:tmp/

image-20231203103528439

⭐️同时github上提供了各种常用语言的忽略文件的模板可以新建仓库时直接使用https://github.com/github/gitignore

举例子

🌰
首先创建两个文件.log 文件

image-20231203095553947

看看此时仓库的状态:可以看到两个文件都还未被添加到暂存区

image-20231203095703303

现在使用.gitignore 同时看看.gitignore文件具体的内容

image-20231203095748285

此时仓库的状态

image-20231203095822364

现在将工作区的文件添加到暂存区并提交到仓库中:可以看到里面没有我们的access.log文件

image-20231203095917095

Github的使用和远程仓库的操作

1.SSH的配置和克隆仓库

创建远程仓库

首先点击左上角的猫猫头像

然后再点击new

image-20231203104413936

进入创建的页面之后 配置

image-20231203104736464

点击create repository后来到以下界面

image-20231203105106495

https和ssh:远程仓库地址的两者方式

image-20231203105152093

https:本地仓库push到远程仓库的时候需要验证用户名和密码

🐬 ssh:不要验证用户名和密码 但是需要在GitHub上配置添加SSH公钥的配置 更安全也更方便

这里我们使用ssh 方式

配置ssh密钥

回到根目录 也就是home 一般是c盘

cd .ssh//进入ssh目录
ssh-keygen -t rsa -b 4096//生成ssh密钥 -t rsa 是协议   -b 4096 大小是4096

此时如果你是第一次配置 直接回车即可

如果前面已经配置过 就会覆盖掉前面已经配置的密钥 这个时候不要直接回车 输入一个新的文件名 比如test 再回车

再输入密码

最后看看具体的内容

image-20231203110328531

image-20231203110230097

打开公钥文件 复制公钥文件的内容

打开GitHub 点击你的右边的头像 点击setting 来到下面的页面:

image-20231203110541689

把公钥复制即可

如果你是第一次配置的话 那么现在配置部分就已经结束啦!

但是你是之前配置过的 还需要回到命令行再增加下面的内容

//当我们访问GitHub的时候 指定使用SSH下的test这个密钥
vi config
#github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/test

克隆仓库

回到本地仓库 执行git clone

image-20231203114818009

这样就克隆成功了

2.本地仓库和远程仓库关联

image-20231203115133221

现在我们在这个仓库中添加一个文件 但是这个文件只是在本地仓库中起效果 远程仓库中并没有改变 所以需要把这个本地仓库的状态同步给远程仓库

git push //把本地仓库的内容同步到远程仓库
把本地仓库关联远程仓库
//以下步骤逐一执行可实现本地仓库push 到远程的另一个仓库
git remote add origin git@github.com:xi-song/first-repo.git // 把本地仓库和远程仓库关联
    
git remote -v //查看本地仓库和远程仓库的别名m和地址
    
git branch -M main// 指定分支的名称为main
   
git push -u origin main:main // -u 是upstream把本地的main分支和远程的orign仓库的main分支关联起来 
//main:main 把本地仓库的main 分支 推送给远程仓库的main 分支  
git push -u origin main //如果本地仓库的分支和远程仓库的分支相同就只写一个main就可以了 即

image-20231203153859348

当前仓库对于远程仓库的别名为origin

远程仓库更新至本地仓库

首先可以来到远程仓库的页面 添加一个文件

image-20231203160022255

这个时候本地仓库还没有这个文件 这个时候就要用pull命令来拉去远程仓库修改的内容

git pull origin main //拉取仓库别名为origin的main 分支 拉取到本地进行合并
git pull //直接默认为 拉取仓库别名为origin的main 分支 拉取到本地进行合并
============
git fetch//只是获取远程仓库的修改,但是不会自动合并到本地仓库中,而实需要我们手动合并

执行git pull 之后 Git 会自动为我们执行一次合并的操作,如果远程仓库中的修改内容和本地仓库中的修改内容没有冲突的话,那么合并操作就会成功。否则合并操作就会因为冲突而失败。

image-20231203160626260

3. gitee 和gitlab

image-20231203161021640

用法大差不差 后续可以继续学习

git中的分支

分支 就像是树的分叉一样

比如同一个项目–记作项目A 需要几个人共同协作,那么这几个人都可以对这个项目仓库在各自的分支进行操作,当然,最后完工的时候,可以合并。各个分支互不影响,这样就能实现合作啦!

A项目

  1. a分支
  2. b分支
  3. c分支

1.创建合并分支

git branch //查看分支
git branch dev //创建一个名字叫dev的分支
git switch dev //从当前分支切换到dev分支
git merge dev //将dev分支合并到当前所在的分支
git branch -d dev //删除dev分支(此时dev未合并)
git branch -D dev //删除dev分支(此时dev已合并)
git log --oneline --graph --decorate --all//查看图形化的分支
//这句太长了 可以定义一个别名 比如graph 那么下一次调用的时候直接输入graph 就可以了
alias graph="git log --oneline --graph --decorate --all"
git checkout -b dev 244d3//之前dev删除了,现在把dev 分支恢复回来  dev 244d3 后面是它提交的ID 可以在git log 里面看提交的ID
   

2.解决冲突

两个分支修改了同一个文件的同一行代码,最后要合并成大项目的时候,git就不知道应该保留那个分支的修改内容了,也就需要手动解决冲突

image-20231203171421377

3.Rebase

Rebase也是将不同的分支整合在一起

可以在任意分支执行base记录

image-20231203191943765

当前分支是main分支,切换到dev分支 :git switch dev 然后变基到main 分支

当前分支是dev分支,切换到main分支 :git switch main 然后变基到dev

merge和rebase

🍎merge

优点:不会破坏原分支的提交历史,方便回溯和查看。

缺点:会产生额外的提交节点,分支图比较复杂。

适合协同工作

🍐rebase

优点:不会新增额外的提交记录,形成线性历史,比较直观和干净

缺点:会改变提交历史,改变了当前分支branch out的节点。避免在共享分支使用。

适合个人工作管理

4.工作流模型

Git工作流模型

1️⃣main分支

项目的核心分支 应该保证项目中的主线分支的代码时可发布的。一般来说主线发分支会部署到生产环境中。

主线分支的代码不允许直接修改,只能通过合并分支的方式进行修改,每次合并分支都建议生成一个新的版本号,这样可以方便追踪和回溯。可以通过给git tag 命令来标记版本号。

【版本号规则】
主版本(Major Version) :主要的功能变化或重大更新;
次版本(Minor Version) :一些新的功能、改进和更新,通常不会影响现有功能;
修订版本: (Patch Version):一些小的bug修复,安全漏洞补丁等。通常不会更改现有功能和接口。

2️⃣hotfix 问题修复分支

3️⃣ develop 开发分支 用于开发和测试

4️⃣ feature 功能分支​

5️⃣release 发布分支​ 预发布分支

Github Flow

在这里插入图片描述

分支命名

推荐使用带有意义的描述性名称来命名分支

版本发布分支/Tag 示例:v1.0.0

功能分支示例: feature-login-page修复分支 示例:hotfix- #issueid-desc

分支管理

定期合并已经成功验证的分支,及时删除已经合并的分支

保持合适的分支数量

为分支设置合适的管理权限

VS code中的图形化界面

大家可以探索一下 很方便!需要充分理解git的原理之后用起来会很顺利~

需要下载的拓展有

image-20231203165835493

image-20231203165752538

🌈好啦!完结~ 欢迎大家留言讨论(点个赞点个赞~ 嘻嘻~)

  • 19
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~光~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值