一篇学会Git版本管理

文章并不完全是按照强逻辑联系在一起排版的,各位根据所需按目录进行跳转。
撒花撒花,学了那么久,终于搞完啦
学计算机专业,尤其是搞软件开发的,真的建议先学Git,了解GitHub的使用,不然你真的会错过太多学习优秀项目时间,就像我一样,悔恨不已。


什么是Git

Git是目前世界上最先进的分布式版本控制系统。

Git是用C语言开发的。

分布式版本控制系统

特点:

  1. 基于服务器、客户端的运行模式
  2. 服务器保存文件的所有更新版本
  3. 客户端是服务器的完整备份,并不只是保留文件的最新版本

优点:

  1. 联网运行,支持多人协作开发
  2. 客户端断网后支持离线本地提交版本更新
  3. 服务器故障或损坏后,可使用任何一个客户端的备份进行恢复

版本库

什么是版本库

版本库,又名仓库,repository。可以简单理解为一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时候都可以追踪历史,或者在将来某个时刻可以“还原”。

Git的安装与配置

安装根据提示一直下一步即可。

配置用户信息,用于记录操作修改的人员信息:

git config —global user.name "您的昵称"

git config —global user.email "您的邮箱"

仓库管理命令

初始化命令

通过git init将目录文件变成可以管理的仓库。

添加文件至暂存区

通过git add 将文件添加到版本库,也就是开始跟踪该文件的修改。

作用:

  1. 可以用它开始跟踪新文件
  2. 把已跟踪的、且已修改的文件放到暂存区
  3. 把有冲突的文件标记为已解决状态

其他:

向暂存区一次性添加多个文件git add . 一次性将所有的新增和修改过的文件加入暂存区

提交文件至本地仓库

通过git commit 将文件提交到版本库,一定要带上-m添加备注信息。

跳过使用暂存区域

git commit -a -m "描述信息" 直接将工作区的文件提交到Git仓库

查看文件状态

通过git status 查看当前仓库中文件状态。

以精简的方式显示文件状态:git status -s 或者 git status -- short

??表示未跟踪状态,untracked

A表示新添加到暂存区状态

M表示修改过的、没有放入暂存区的文件状态

M表示已修改且已放入暂存区的文件状态

查看文件在当前工作区与本地仓库的异同

通过git diff 查看前后文件的区别,即改动内容。

查看历史版本

通过git log 查看仓库内文件的历史版本,加上–pretty=oneline 用一行展示。

取消暂存的文件

git reset HEAD 要移除的文件名称

回退到指定的版本

通过git reset --hard commit_id 回退到版本号所处的仓库状态。

commit_id:

  1. 版本号,可以用HEAD表示当前版本,上一个版本就是HEAD,上上个版本就是HEAD^,往上100个版本可以表示成HEAD~100
  2. 也可以是十六进制表示的数字编号

移除文件

  1. 从Git仓库和工作区中同时移除对应的文件git rm -f index.js
  2. 只从Git仓库中移除指定的文件,但保留工作区中对应的文件git rm --cached index.css

查看提交历史

通过git reflog 查看历史提交的版本备注内容。

关于git log git reflog的区别是:前者是历史提交的详细信息,包括版本号、作者信息、日期、提交时的备注内容,后者是直接查看版本备注信息。

撤销工作区的修改

git restore to discard changes in working directory

git checkoutto discard changes in working directory

上述两条命令都是撤销工作区的修改。git checkout其实就是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以一键还原。

远程仓库

Gitee和GitHub都是可以提供Git仓库托管服务的。注册相关账号,你就拥有了远程仓库。

本地仓库与远程仓库之间的传输是通过SSH加密的,配置步骤如下:

  1. 创建SSH Key。在C:\Users\Administrator目录下,看是否已有.ssh目录,该目录下是否有id_rsaid_rsa.pub这两个文件。如果有可直接跳过,没有就在Git Bash中执行如下命令创建SSH Key:ssh-keygen -t rsa -C "[email protected]"

  2. 登录远程仓库的账号,找到设置下的SSH字样,在Key文本框中粘贴id_rsa.pub文件中的内容
    在这里插入图片描述
    在这里插入图片描述

  3. 添加完成

添加远程库

找到Create a new repository的页面,点击创建仓库按钮新建一个名为learngit的仓库。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oftTXrhk-1655044110365)(https://secure2.wostatic.cn/static/kTacVsGLm5WjJmcqy4Vwq2/image.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pMMSQrdr-1655044110365)(https://secure2.wostatic.cn/static/hu1GHsqj2o323WHfL7JBvH/image.png)]

关联远程库

git remote add origin [email protected]:ahcici/learngit.git

.com 后面的ahcici替换成你自己的账户名,远程库的名字是origin,也可以更改为其他的。

推送本地库内容

git push -u origin main

加上-u 会把本地的分支和远程的分支关联起来,只在第一次推送的时候使用

可以简化以后的pull/push命令

之后的推送命令就可以是git push origin main

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J4TGRUTQ-1655044110366)(https://secure2.wostatic.cn/static/2sbPiMELqBYNYBodTVhxWC/image.png)]

这个origin后的分支名,看你自己有没有改动过,以路径后面提示的内容为准。

origin是远程仓库的别名。

删除远程库

并不是真正意义上的删除远程库,只是取消本地仓库与远程仓库的连接。

通过git remote -v查看远程库信息。

通过git remote rm origin<远程仓库名称>解除本地与远程仓库的绑定关系。

克隆远程库

假若我不小心将我本地的learngit目录删除了,由于我已经推送过远程库,那么我可以从远程库复制一份到本地,也被称之为克隆。

首先,得先清楚要克隆的仓库地址,其也就是咱们之前关联的仓库地址是一样的,就是这样的格式: [email protected]:ahcici/learngit.git

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nWxVhj2z-1655044110367)(https://secure2.wostatic.cn/static/sGnemBZ4CzMkn5peuCh8o8/image.png)]

按图操作,最后使用git clone [email protected]:ahcici/learngit.git<你第四步复制的地址>命令克隆到本地。

分支管理

创建分支

git checkout -b dev(分支名) 加上-b参数表示创建并切换相当于git branch dev【创建分支】+git checkout dev【切换分支】

查看分支列表

git branch 查看当前分支列表 分支名字前的*好表示当前所处的分支

查看远程仓库中的分支列表git remote show origin

合并分支

git merge dev(分支名) 合并指定分支到当前分支

合并分支时,使用--no-ff参数表示禁用fast forward使用普通合并。

删除分支

git checkout -d dev(分支名) 删除指定分支

删除远程分支

git push 远程仓库名称 --delete 远程分支名称

切换分支

git switch -c dev创建并切换到新的dev分支

解决冲突

在两个不同的分支中,对同一个文件进行了不同的修改, 即git无法执行“快速合并”,只能试图将各自的修改合并起来,所以会存在冲突,需要手动进行修改再添加并提交。

分支合并图

git log --graph 可以查看分支合并图。

git log --graph --pretty=oneline —abbrev-commit 一行展示合并图和提交信息简写。

相关概念

开源许可协议

BSD

Apache License 2.0

GPL: 具有传染性的一种开源协议,不允许修改后和衍生的代码作为闭源的商业软件发布和销售

具有GPL的最著名的软件项目是:Linux

LGPL

MIT: 是目前限制最少的协议,唯一的条件:在修改后的代码或者发行包中,必须包含原作者的许可信息

使用MIT的软件项目有jquery、Node.js

开源项目托管平台

专门用于免费存放开源项目源代码的网站

GitHub

Gitlab

Gitee

远程仓库的两种访问方式

  1. HTTPS:零配置;但是每次访问仓库时,需要重复输入GitHub的账号和密码才能访问成功
  2. SSH:需要进行额外配置;但是配置成功后,每次访问仓库时,不需重复输入github的账号和密码

在实际开发中,推荐使用SSH的方式访问远程仓库。

SSH Key

作用:实现本地仓库和github之间的免登录的加密数据传输。

工作区与暂存区

工作区是咱们所操作的文件目录,除了工作区外,还有一个暂存区,也就是git add 以后文件被存储的位置,而git commit 以后文件就被提交到了master主分支上。

通俗来讲,就好比在餐厅吃饭,我们几个人先点了单,但是途中我们会希望换掉某道菜或再加上几道菜,等到最后已经吃饱喝足,就得付款了,那么实际付的金额就是最后修改后所有菜单内容的价值。当然或许这个例子不太恰当,但在这里足够说明工作区、暂存区和最后的分支上的内容是有差的。

需要注意的是Git跟踪并管理的是修改,而非文件。

master主分支:用来保存和记录整个项目已完成的功能代码

功能分支:专门用来开发新的功能的分支

常见错误

Q:fatal: not a git repository (or any of the parent directories): .git

A:当前目录文件夹不是Git仓库,即没有.git 进行管理,操作无效

Q:fatal: pathspec 'readme.txt' did not match any files

A:匹配不到readme.txt文件,即文件不存在或文件名字有误导致找不到

猜你喜欢

转载自blog.csdn.net/weixin_51229662/article/details/125114907
今日推荐