Git的使用


前言

  介绍Git的安装和使用


一、环境搭建

1.1 git下载及安装

  百度搜git,直接进官网免费下载:https://git-scm.com/,如果官网下载太慢,我们可以使用淘宝镜像下载:http://npm.taobao.org/mirrors/git-for-windows/,也可以从附件下载
在这里插入图片描述

安装:注意修改默认路径,其他无脑下一步即可!安装完毕就可以使用了!
在这里插入图片描述
  安装完成可以在命令行里输入git查看环境变量,如有下面输出即环境变量正确
在这里插入图片描述

1.2 Github账号注册

  GitHub是国外的代码托管平台,GitHub的公开项目数量多,GitHub的用户数量多,开发者社区活跃,现被Microsoft收购,所以下载受到国外网络的限制。GitHub适合开源项目的下载
  登录官网https://github.com/,注册账号,按提示一步步设置下去,注册好了点击Sign in进行登录。
在这里插入图片描述

1.3 码云Gitee

  Gitee是国内的代码托管平台,其用户数量与开发者社区活跃度都少于Github,不过Gitee在国内使用没有任何限制,适合上传自己的项目代码
  登录官网https://gitee.com/注册账号
在这里插入图片描述

注意:除了Gitee与Github还有GitLab,GitLab是一款开源的代码托管平台,可以自己搭建在私有服务器上,也可以使用GitLab官方提供的托管服务,一般公司使用

二、Git简介

2.1 什么是版本控制

  版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术,简单说就是用于管理多人协同开发项目的技术。它有以下优点:

  • 实现跨区域多人协同开发
  • 追踪和记载一个或者多个文件的历史记录
  • 组织和保护你的源代码和文档
  • 统计工作量
  • 并行开发、提高开发效率
  • 跟踪记录整个软件的开发过程
  • 减轻开发人员的负担,节省时间,同时降低人为错误

  没有进行版本控制或者版本控制本身缺乏正确的流程管理,在软件开发过程中将会引入很多问题,如软件代码的一致性、软件内容的冗余、软件过程的事物性、软件开发过程中的并发性、软件源代码的安全性,以及软件的整合等问题。
  其次,无论是工作还是学习,或者是自己做笔记,都经历过这样一个阶段!我们就迫切需要一个版本控制工具!

2.2 Git基本理论

2.2.1 分布式版本控制Git

  每个人都拥有全部的代码!安全隐患!所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。不会因为服务器损坏或者网络问题,造成不能工作的情况!
请添加图片描述
  Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。Git可以直接看到更新了哪些代码和文件!

2.2.2 工作区域与文件状态

  Git本地有四个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)和远程的git仓库(Remote Directory)。文件在这四个区域之间的转换关系如下:
请添加图片描述

  • Workspace:工作区,就是你平时存放项目代码的地方,在电脑里能实际看到的目录
  • Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息, 一般在.git目录下的index中。
  • Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据,仓库信息存储在.git这个隐藏目录中。
  • Remote:远程仓库,托管代码的服务器,常用的有GitHub、 GitLab、 Gitee。

  版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。文件的五种存储状态如下:

  • Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
  • Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
  • Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !
  • Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified
  • Committed:已提交。把暂存区的文件提交到本地仓库后的状态。

2.2.3 其他文件属性

  此外还有文件属性状态:

名称状态
main/master默认主分支
Origin默认远程仓库
HEAD指向当前分支的指针
HEAD^上一个版本
HEAD~上四个版本

  一些特殊文件的功能:

文件名作用
.gitGit仓库的元数据和对象数据库
.gitignore忽略文件,不需要提交到仓库的文件
.gitattributes指向当前分支的指针
.gitkeep使空目录被提交到仓库
.gitmodules记录子模块的信息
.gitconfig记录仓库的配置信息

2.2.4 GitFlow

  GitFlow是一种流程模型,用于在Git上管理软件开发项目。

  • 主分支(master/main):代表了项目的稳定版本,每个提交到主分支的代码都应该是经过测试和审核的。
  • 开发分支(develop):用于日常开发。所有的功能分支、发布分支和修补分支都应该从开发分支派生出来。
  • 功能分支(feature):用于开发单独的功能或者特性。每个功能分支都应该从开发分支派生,并在开发完成后合并回开发分支。
  • 发布分支(release):用于准备项目发布。发布分支应该从开发分支派生,并在准备好发布版本后合并回主分支和开发分支。
  • 热修复分支(hotfix):用于修复主分支上的紧急问题。热修复分支应该从主分支派生,并在修复完成后,合并回主分支和开发分支。

三、Git相关命令使用

  安装成功后在开始菜单中会有Git项,菜单下有3个程序:
在这里插入图片描述

Git Bash:Unix与Linux风格的命令行,使用最多,推荐最多
Git CMD:Windows风格的命令行
Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令

注意:正常直接鼠标右击Git Bash Here就可以打开终端
在这里插入图片描述

3.1 全局配置

  当你安装Git后首先要做的事情是设置你的用户名称和e-mail地址。这是非常重要的,因为每次Git提交都会使用该信息。只需要做一次这个设置,如果你传递了–global 选项,因为Git将总是会使用该信息来处理你在系统中所做的一切操作。如果你希望在一个特定的项目中使用不同的名称或e-mail地址,你可以在该项目中运行该命令而不要–global选项。总之–global为全局配置,不加为某个项目的特定配置。它被永远的嵌入到了你的提交中:

git config --global user.name "skylv125"  #名称
git config --global user.email 2239530224@qq.com #邮箱

  所有的配置文件,其实都保存在本地!Git相关的配置文件:

1)Git\etc\gitconfig :Git 安装目录下的 gitconfig --system 系统级
2)C:\Users\Administrator\ .gitconfig 只适用于当前登录用户的配置 --global 全局

  查看配置相关命令:

#查看配置
git config -l
#查看系统config
git config --system --list
#查看当前用户(global)配置
git config --global  --list

在这里插入图片描述

3.2 创建仓库

  仓库即工作目录(WorkSpace),一般就是你希望Git帮助你管理的文件夹,可以是你项目的目录,也可以是一个空目录,建议不要有中文。有以下两种方法:

  1. 创建一个新的本地仓库
git init #初始化目录
  1. 克隆远程仓库
git clone <url>  # https://github.com/skylv125/shop.git

  执行后可以看到,仅仅在项目目录多出了一个.git目录(需要打开隐藏的项目),关于版本等的所有信息都在这个目录里面。
在这里插入图片描述

3.3 添加提交和查看状态

  文件添加和提交相关命令如下:

git status #查看当前状态
#添加一个文件到暂存区, 比如git add . 就表示添加所有文件到暂存区。
git add <文件名> 
#添加所有文件到暂存区
git add . 
#提交所有暂存区的文件到本地仓库。
git commit -m “注释内容” 
#提交所有已修改的文件到本地仓库。
git commit -am "message"

  上面2.2小节说文件有5种状态,通过如下命令可以查看到文件的状态:

#查看指定文件状态
git status [filename]

#查看所有文件状态
git status

# 查看提交历史, --oneline表示简介模式。
git log --oneline

# 查看未暂存的文件更新了哪些部分。
git diff

# 查看两个提交之间的差异
git diff <commit-id> <commit-id>

  新建一个文件,可以看出状态已改变
在这里插入图片描述

3.4 忽略文件

  有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等在主目录下建立".gitignore"文件(对当前目录生效),在.gitignore里输入以下内容,此文件有如下规则:

1)忽略文件中的空行或以井号(#)开始的行将会被忽略。
2)可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,…})代表可选的字符串等。
3)如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
4)如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
5)如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。

#为注释
*.txt        #忽略所有 .txt结尾的文件,这样的话上传就不会被选中!
!lib.txt     #但lib.txt除外
/temp        #仅忽略项目根目录下的TODO文件,不包括其它目录temp
build/       #忽略build/目录下的所有文件
doc/*.txt    #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

在这里插入图片描述

3.5 远程仓库

  github是有墙的比较慢,在国内的话我们一般使用gitee ,公司中有时候会搭建自己的gitlab服务器。这里我以gitee为例,首先注册登录码云,完善个人信息。设置本机绑定SSH公钥,实现免密码登录!(免密码登录,这一步挺重要的,码云是远程仓库,我们是平时工作在本地仓库!)

# 在C:\Users\Administrator目录下创建.ssh文件夹
# 进入 C:\Users\Administrator\.ssh 目录
# 生成公钥ssh-keygen命令
ssh-keygen -t rsa -C "邮箱地址" #创建公钥(需要安装OpenSSH)

  使用命令后需要几次回车确认,最终在.ssh文件夹下生成id_rsa和id_rsa.pub文件,如下图所示:
在这里插入图片描述
  用Notepad++或者记事本打开id_rsa.pub文件,内容全选复制Gitee公钥位置,然后确定后需要验证密码
在这里插入图片描述
  接下来我们先在Gitee上新建仓库,之后就可以使用相关命令上传或下载远程仓库

# 添加远程仓库。
git remote add <remote-name> <remote-url>

# 查看远程仓库。
git remote -v

# 删除远程仓库
git remote rm <remote-name>

# 重命名远程仓库。
git remote rename <old-name> <new-name>

# 从远程仓库拉取代码。 默认拉取远程仓库名origin的master或者main分支。
git pull <remote-name> <branch-name>

# 将本地改动的代码rebase到远程仓库的最新代码上 ( 为了有一个干净、 线性的提交历史) 。
git pull --rebase

# 推送代码到远程仓库 ( 然后再发起pull request) 。
git push <remote-name> <branch-name>

# Fetch某一个特定的远程分支。
git fetch <remote-name> <branch-name>

# 从该链接下载文件
git clone https://github.com/用户名/文件 #使用clone指令:

注意
①当线上仓库和本地不一样时,git push会产生冲突,需要先git pull下载下来,修改后再上传
②如果是本地文件,需要先init初始化,然后commit提交,然后用remote关联远程仓库地址(http或者ssh),才能提交
③win10以上电脑可以自动记住密码,可以选择不用配置ssh

四、其他操作与命令

  由于我是个人使用git,以下命令我可能不常用,所以放到这里

4.1 版本回退

  回退之前先查看信息

git log #查看版本
git log --pretty=oneline #查看提交历史
git reset --hard 版本号 #回退操作
git reflog #查看历史操作

  其他撤销和恢复命令

# 移动一个文件到新的位置
git mv <file> <new-file>

# 从工作区和暂存区删除一个文件, 并且将这次删除放入暂存区。
git rm <file>

# 从索引/暂存区中删除文件, 但是本地工作区文件还在, 只是不希望这个文件被版本控制。
git rm --cached <file>

# 恢复一个文件到之前的版本。
git checkout <file> <commit-id>

# 创建一个新的提交, 用来撤销指定的提交, 后者的所有变化将被前者抵消, 并且应用到当前分支。
git revert <commit-id>


# 重置当前分支的HEAD为之前的某个提交, 并且删除所有之后的提交。commit-id:
# --hard参数表示重置工作区和暂存区,
# --soft参数表示重置暂存区,
# --mixed参数表示重置工作区。
git reset --mixed <commit-id>

# 撤销暂存区的文件, 重新放回工作区 ( git add的反向操作) 。
git restore --staged <file>

4.2 git分支管理

  在github上会有主分支master,开发分支dev以及其他分支,我由于是个人使用,所以主分支就行了。分支在Git中相对较难,git分支中常用指令:

# 列出所有本地分支
git branch

# 列出所有远程分支
git branch -r

# 新建一个分支,但依然停留在当前分支
git branch [branch-name]

# 新建一个分支,并切换到该分支
git checkout -b [branch]

# 给当前的提交打上标签, 通常用于版本发布。
git tag <tag-name>

# 合并指定分支到当前分支
git merge [branch]

# 删除一个分支, 不管是否合并
git checkout -D <branch-name>

# 删除分支
git branch -d [branch-name]

# 删除远程分支
git push origin --delete [branch-name]
git branch -dr [remote/branch]

4.3 Stash

  Stash操作可以把当前工作现场 “储藏”起来, 等以后恢复现场后继续工作。

# save参数表示存储的信息, 可以不写。message:
# -u 参数表示把所有未跟踪的文件也一并存储;
# -a 参数表示把所有未跟踪的文件和忽略的文件也一并存储;
git stash save "message"

# 查看所有stash。
git stash list

#恢复最近一次stash。
git stash pop

# 恢复指定的stash, stash@{2}表示第三个stash, stash@{0}表示最近的stash。
git stash pop stash@{2}

# 重新接受最近一次stash。
git stash apply

# pop和apply的区别是, pop会把stash内容删除, 而apply不会。
# 可以使用git stash drop 来删除stash。
git stash drop stash@{2}

# 删除所有stash。
git stash clear

补充

Linux相关命令

见以下文章:https://blog.csdn.net/weixin_44567668/article/details/125189852

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

别问,问就是全会

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

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

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

打赏作者

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

抵扣说明:

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

余额充值