一篇学会Git版本管理
Git
- 序
- 什么是Git
- 分布式版本控制系统
- 版本库
- 什么是版本库
- Git的安装与配置
- 仓库管理命令
- 初始化命令
- 添加文件至暂存区
- 提交文件至本地仓库
- 跳过使用暂存区域
- 查看文件状态
- 查看文件在当前工作区与本地仓库的异同
- 查看历史版本
- 取消暂存的文件
- 回退到指定的版本
- 移除文件
- 查看提交历史
- 撤销工作区的修改
- 远程仓库
- 添加远程库
- 关联远程库
- 推送本地库内容
- 删除远程库
- 克隆远程库
- 分支管理
- 创建分支
- 查看分支列表
- 合并分支
- 删除分支
- 删除远程分支
- 切换分支
- 解决冲突
- 分支合并图
- 相关概念
- 开源许可协议
- 开源项目托管平台
- 远程仓库的两种访问方式
- SSH Key
- 工作区与暂存区
- 常见错误
序
文章并不完全是按照强逻辑联系在一起排版的,各位根据所需按目录进行跳转。
撒花撒花,学了那么久,终于搞完啦
学计算机专业,尤其是搞软件开发的,真的建议先学Git,了解GitHub的使用,不然你真的会错过太多学习优秀项目时间,就像我一样,悔恨不已。
什么是Git
Git是目前世界上最先进的分布式版本控制系统。
Git是用C语言开发的。
分布式版本控制系统
特点:
- 基于服务器、客户端的运行模式
- 服务器保存文件的所有更新版本
- 客户端是服务器的完整备份,并不只是保留文件的最新版本
优点:
- 联网运行,支持多人协作开发
- 客户端断网后支持离线本地提交版本更新
- 服务器故障或损坏后,可使用任何一个客户端的备份进行恢复
版本库
什么是版本库
版本库,又名仓库,repository。可以简单理解为一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时候都可以追踪历史,或者在将来某个时刻可以“还原”。
Git的安装与配置
安装根据提示一直下一步即可。
配置用户信息,用于记录操作修改的人员信息:
git config —global user.name "您的昵称"
git config —global user.email "您的邮箱"
仓库管理命令
初始化命令
通过git init将目录文件变成可以管理的仓库。
添加文件至暂存区
通过git add 将文件添加到版本库,也就是开始跟踪该文件的修改。
作用:
- 可以用它开始跟踪新文件
- 把已跟踪的、且已修改的文件放到暂存区
- 把有冲突的文件标记为已解决状态
其他:
向暂存区一次性添加多个文件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:
- 版本号,可以用HEAD表示当前版本,上一个版本就是HEAD,上上个版本就是HEAD^,往上100个版本可以表示成HEAD~100
- 也可以是十六进制表示的数字编号
移除文件
- 从Git仓库和工作区中同时移除对应的文件
git rm -f index.js
- 只从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加密的,配置步骤如下:
创建SSH Key。在
C:\Users\Administrator
目录下,看是否已有.ssh目录,该目录下是否有id_rsa
和id_rsa.pub
这两个文件。如果有可直接跳过,没有就在Git Bash
中执行如下命令创建SSH Key:ssh-keygen -t rsa -C "youremail@example.com"
登录远程仓库的账号,找到设置下的SSH字样,在Key文本框中粘贴
id_rsa.pub
文件中的内容
添加完成
添加远程库
找到Create a new repository的页面,点击创建仓库按钮新建一个名为learngit的仓库。
关联远程库
git remote add origin git@github.com:ahcici/learngit.git
将.com
后面的ahcici替换成你自己的账户名,远程库的名字是origin,也可以更改为其他的。
推送本地库内容
git push -u origin main
加上-u
会把本地的分支和远程的分支关联起来,只在第一次推送的时候使用
可以简化以后的pull/push命令
之后的推送命令就可以是git push origin main
这个origin后的分支名,看你自己有没有改动过,以路径后面提示的内容为准。
origin是远程仓库的别名。
删除远程库
并不是真正意义上的删除远程库,只是取消本地仓库与远程仓库的连接。
通过git remote -v查看远程库信息。
通过git remote rm origin<远程仓库名称>解除本地与远程仓库的绑定关系。
克隆远程库
假若我不小心将我本地的learngit目录删除了,由于我已经推送过远程库,那么我可以从远程库复制一份到本地,也被称之为克隆。
首先,得先清楚要克隆的仓库地址,其也就是咱们之前关联的仓库地址是一样的,就是这样的格式: git@github.com:ahcici/learngit.git
按图操作,最后使用git clone git@github.com: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
远程仓库的两种访问方式
- HTTPS:零配置;但是每次访问仓库时,需要重复输入GitHub的账号和密码才能访问成功
- 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
文件,即文件不存在或文件名字有误导致找不到
一篇学会Git版本管理相关推荐
- 猿创征文|一篇学会Git的使用
目录 Git的版本控制 常见的版本控制工具 版本控制分类 1.本地版本控制 2.集中版本控制 svn 3.分布式控制 git Git和SVN的主要区别 Git的历史 Git环境配置 软件下载 启动gi ...
- Git——版本管理工具(一)
Git 是一个分布式版本控制工具,它的作者 Linus Torvalds 是这样给我们介绍 Git -- The stupid content tracker(傻瓜式的内容跟踪器) 1. Git 背 ...
- 微信小程序云开发新手教程——关于多人云开发和git版本管理
多人团队开发微信小程序项目时,如何更好的进行团队协作是一个关键问题.接下来的这篇文章里,主要以项目的管理者和项目参与者两种身份,介绍了云开发初始环境的配置的具体方法,以及通过git进行团队的版本管理. ...
- 深入浅出Git教程+一个小时学会Git(转载)(堪称完美)
转载自: https://www.cnblogs.com/best/p/7474442.html#!comments 目录 一个小时学会Git 一.版本控制概要 工作区 暂存区 本地仓库 远程仓库 1 ...
- Git 版本管理工具(一)
Git 是一个分布式版本控制工具,它的作者 Linus Torvalds 是这样给我们介绍 Git -- The stupid content tracker(傻瓜式的内容跟踪器) 1. Git 背 ...
- 微信小程序——Git版本管理
一篇文章带你学会微信小程序中的Git版本管理 场景复现 微信开发者工具中的Git 连接远程仓库 配置网络和认证 提交工作区更改 查看历史 查看文件修改历史 切换分支 创建分支 拉取.推送与抓取 微信官 ...
- 一篇学会HttpServletRequest
前言 JavaWeb系列教程 JavaWeb-Servlet 模拟Servlet本质 使用IDEA开发Servlet程序 Servlet对象的生命周期 适配器(GenericServlet)改造Ser ...
- git学习——四git版本管理
一.git版本管理的优势 都说git比svn强大,强大在哪呢? 首先,从部署上说:svn.cvs都是集中式的,一台服务器上部署服务,所有客户端编写的代码都要提交到该服务器上.git是分布式的,所有人都 ...
- g4e基础篇#3 Git安装与配置
现在你已经对Git有了最基本的了解,现在让我们开始动手开始安装和配置Git环境. Git工具包括Git命令行工具,图形化工具和服务器环境:在我们这个教程中,我们会使用以下软件配置我们的环境: • Wi ...
最新文章
- Ubuntu14.04下Neo4j图数据库官网安装部署步骤(图文详解)(博主推荐)
- 采用傅立叶变换空间载波法从强度分布得到相位分布,即从空间上呈正弦分布的光强信息,恢复出波面的相位信息
- ACE - Reactor模式源码剖析及具体实现(大量源码慎入)
- Linux 卷管理详解[ pv vg lv] —— 之三
- 下滑加载更多js_专治:卫生间免砸砖,房顶漏水,JS堵漏王水不漏,厂家三包产品,免费成熟配方(点开看更多)...
- Java面试题:IO流的标准处理异常的代码
- haproxy心跳检测_haproxy 非常完整的配置
- Android笔记(四十七) Android中的数据存储——XML(三)SAX解析
- Android开发之PullToRefresh的Click点击事件的监听实现长按删除Item
- 引力波应该称为空间波
- Java算法常见面试题及答案
- Qt使用资源管理器打开指定本地文件夹
- 1.3寸IIC OLED SH1106和Arduino库的适配性鸡肋问题
- H5互动游戏平台推荐:盘点那些超火的多人小游戏互动对战平台
- Android:简单实现美女扒衣服小游戏
- 原生js实现QQ邮箱邮件拖拽删除功能
- 智能投顾Betterment优于传统88%的收益率背后掩盖着什么真相?
- 零基础无实物一步一步学PLCS7-1200仿真 背景知识二 电气控制基本电路
- 摄像头采用国标GB28181协议信令调试(SPVMN 视频监控联网调测软件)
- 【2021最新版】Spring Cloud面试题总结(35道题含答案解析)