一篇文章搞懂Git与Github

这篇具有很好参考价值的文章主要介绍了一篇文章搞懂Git与Github。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Git 与 Github 简介

Git 是一个开源的分布式版本控制系统,Github 是全球最大的同性交友网站基于 Git 的代码托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub,就是一个平台上面有无数个 Git 仓库——Git 版的百度云,承担存储远程仓库的作用。

唯一版本库是什么意思?

唯一版本库通常指的是仅有一个主版本库(Main Repository),所有开发人员都从该主版本库中进行代码的拉取、修改和推送,从而保证代码的唯一性和一致性

为什么需要版本控制工具

在大学的时候老师要求你交一个论文或大作业,但你不知道在老师的要求下你的版和最终版差了多少个兄弟姐妹

初版.rar——>修改版.rar——>再次修改版.rar——>进阶版.rar——>最终版.rar——>真的最终版.rar——> 完成版.rar——>再改我是狗.rar——> cnm不想再改了.rar——>…

那如果大作业是程序设计的话,你的代码可能前一秒还健步如飞,下一秒就当场去世了,就算程序员没对象,也总是会问自己到底我哪错了,版本控制的作用之一就是解决这些问题的,它可以帮助你管理不同的版本,并且可以随时回退到任意时刻。

版本控制的第二个作用是协同开发,Git 可以自动合并代码,从而大大增加生产效率。

GitHub 术语解释

为了大家进一步了解和使用 Git 和 GitHub,我们一起来看看 GitHub 的常用术语,也可以说是基本概念:

Repository:简称 Repo,可以理解为“仓库”,我们的项目就存放在仓库之中。也就是说,如果我们想要建立项目,就得先建立仓库;有多个项目,就建立多个仓库。

Issues:可以理解为“问题”,举一个简单的例子,如果我们开源一个项目,如果别人看了我们的项目,并且发现了 bug,或者感觉那个地方有待改进,他就可以给我们提出 Issue,等我们把 Issues 解决之后,就可以把这些 Issues 关闭;反之,我们也可以给他人提出 Issue。

Star:可以理解为“点赞”,当我们感觉某一个项目做的比较好之后,就可以为这个项目点赞,而且我们点赞过的项目,都会保存到我们的 Star 之中,方便我们随时查看。在 GitHub 之中,如果一个项目的点星数能够超百,那么说明这个项目已经很不错了。

Fork:可以理解为“拉分支”,如果我们对某一个项目比较感兴趣,并且想在此基础之上开发新的功能,这时我们就可以 Fork 这个项目,这表示复制一个完成相同的项目到我们的 GitHub 账号之中,而且独立于原项目。之后,我们就可以在自己复制的项目中进行开发了。

Clonegit clone xx 是比较熟悉的操作,它类似于 Download 功能,可以理解为将云端代码下载到我们自己电脑的本地。
正常的话需要我们本机安装了 git,然后使用 git clone [仓库地址] 即可将制定仓库地址代码下载到我们本机。

Push:可以理解为“推送”,当你在本地进行修改后,将修改同步到你的 Github 上的仓库中。

Pull Request:可以理解为“提交请求”,此功能是建立在 Fork 之上的,如果我们 Fork 了一个项目,对其进行了修改,而且感觉修改的还不错,我们就可以对原项目的拥有者提出一个 Pull 请求,等其对我们的请求审核,并且通过审核之后,就可以把我们修改过的内容合并到原项目之中,这时我们就成了该项目的贡献者。

Merge:可以理解为“合并”,如果别人 Fork 了我们的项目,对其进行了修改,并且提出了 Pull 请求,这时我们就可以对这个 Pull 请求进行审核。如果这个 Pull 请求的内容满足我们的要求,并且跟我们原有的项目没有冲突的话,就可以将其合并到我们的项目之中。当然,是否进行合并,由我们决定。

Watch:可以理解为“观察”,如果我们 Watch 了一个项目,之后,如果这个项目有了任何更新,我们都会在第一时候收到该项目的更新通知,如果设置了邮件还会邮件通知。

Gist:如果我们没有项目可以开源或者只是单纯的想分享一些代码片段的话,我们就可以选择 Gist。不过说心里话,如果不翻墙的话,Gist 并不好用。

Git 工作流程

下图展示了 Git 的工作流程,以及主要的命令对仓库的影响

一篇文章搞懂Git与Github

workspace 即工作区,逻辑上是本地计算机,还没添加到 repository 的状态;
staging area 即版本库中的 stage,是暂存区。修改已经添加进 repository,但还没有作为 commit 提交,类似于缓存;
local repository 即版本库中 master 那个地方。到这一步才算是成功生成一个新版本;
remote repository 则是远程仓库。用来将本地仓库上传到网络,可以用于备份、共享、合作。

Git 安装与配置用户信息

下载:Git 官方下载地址,下载对应版本安装即可。
在本地配置用户信息:

  1. 配置内容:user.name 和 user.email
  2. 配置目的:Git 用来记录谁做了什么事
  3. 配置方法:windows 下打开 Git Bash 进行操作或直接在 config 文件里改,位置在 C:\Users\你的用户名.gitconfig

git config #查看本机是否配置了个人信息
git config --global user.name "……" #定义全局的用户名
git config --global user.email "……" #定义全局的邮件地址
git config --global user.password "……" #配置密码
git config --list #查看本地配置信息
git config --global --list #查看全局配置信息

添加公钥到 Github 服务器

  1. 配置目的: pull,push每次都要输入密码,相当的烦。使用 SSH 密钥,可以省去每次都输密码
  2. 生成 SSH key 方法:首先确认本地是否已经有该文件,确认 C:\Users\你的用户名.ssh目录下是否有文件 id_rsa 和 id_rsa.pub,如果没有通过以下方法生成

运行 ssh-keygen -t rsa -C "你在github上注册的邮箱",最后在你的主目录中能看到这两个文件。
id_rsa 是私钥不要轻易告诉别人,id_rsa.pub 是公钥可放心告诉任何人

一篇文章搞懂Git与Github
添加公钥到 Github 服务器:copy 本地 id_rsa.pub 的内容到 Github 的 Setting 中,具体如图:

一篇文章搞懂Git与Github

Git 的基本使用及其常用命令介绍

首先,在我们进行任何的 git 操作之前,我们都得先切换到 Git 的仓库目录。换言之,我们得到先进入到(我们定义的)Git 仓库的最顶层文件目录下,然后在此目录中 Git Bash Here,这样之后的操作才能顺利进行。

Git Bash下的复制和粘贴为 Ctrl + InsShift + Ins

第 1 个命令:git status

查看当前仓库的状态。

一篇文章搞懂Git与Github

第 2 个命令:git init

用来初始化仓库,这条命令运行后,所在目录便成为一个 Git 仓库了,并且默认进入 Git 仓库的 master 分支,即主分支,且当前目录会生成一个隐藏的 .git 目录。如果没有看到 .git 目录,那是因为这个目录默认是隐藏的,用 ls -ah 命令就可以看到了。

一篇文章搞懂Git与Github
第 3 个命令:git add

在该文件夹下新建一文本文档命名为 hit,然后在 Git Bash 命令行窗口的光标处,输入 git add hit.txt 命令,便将 hit.txt 文件添加到 Git 仓库的暂存区。

第 4 个命令:git commit

在命令行窗口的光标处,输入 git commit -m "text commit"命令,将 hit.txt 文件提交到 Git 仓库

一篇文章搞懂Git与Github
我们成功将文件 hit.txt 提交到了 Git 仓库,其中 commit 表示提交,-m 表示提交信息,双引号""内的是提交信息。

第 5 个命令:git log

在命令行窗口的光标处,输入 git log 命令,打印 Git 仓库提交日志

一篇文章搞懂Git与Github
如上图所示,显示了我们的提交记录,提交记录的内容包括 Author 提交作者、Date 提交日期和提交信息。

第 6 个命令:git branch

在命令行窗口的光标处,输入 git branch 命令,查看 Git 仓库的分支情况:

一篇文章搞懂Git与Github
显示了当前仓库中的分支情况,现在仅有一个 master 分支,其中 master 分支前的 * 号表示“当前所在的分支”,例如 * master 就意味着我们所在的位置为 demo 仓库的主分支。输入命令 git branch a,再输入命令 git branch,结果如下图所示:

一篇文章搞懂Git与Github
如上图所示,我们创建了一个名为 a 的分支,并且当前的位置仍然为主分支(分支是很容易被创建的)。

第 7 个命令:git checkout

在命令行窗口的光标处,输入 git checkout a 命令,切换到 a 分支:

一篇文章搞懂Git与Github
如上图所示,我们已经切换到 a 分支啦!通过命令 git branch 查看分支情况 * 号也已出现在 a 分支前。

在这里,我们还有一个更简单的方法来查看当前的分支,即命令行的最后已经给出了当前所在分支。此外,我们也可以在创建分支的同时,直接切换到新分支,命令为 git checkout -b,例如输入 git checkout -b b 命令:

一篇文章搞懂Git与Github
如上图所示,我们创建了 b 分支,并直接切换到 b 分支。

第 8 个命令:git merge

切换到 master 分支,然后输入 git merge a 命令,将 a 分支合并到 master 分支:

(合并过程就是先切换一下当前分支,之后使用 git merge a(就是自己想要合并的分支,自己选))

一篇文章搞懂Git与Github
如上图所示,我们已经将 a 分支合并到主分支啦!此外,在这里需要注意一点,那就是:在合并分支的时候,要考虑到两个分支是否有冲突,如果有冲突,则不能直接合并,需要先解决冲突;反之,则可以直接合并。

git中的两个分支是否有冲突是什么意思,这是因为什么导致的?

在 Git 中,如果两个分支都修改了同一个文件的同一部分,并且尝试将它们合并在一起,就会发生冲突。这种情况下,Git 无法自动决定应该保留哪个更改,因此需要手动解决冲突。

解决冲突通常需要打开包含冲突的文件,并手动编辑它们,以删除冲突并选择要保留的更改。然后,可以将文件标记为已解决冲突,并将更改提交到 Git 中,以表示解决了冲突。

冲突通常发生在多个人在同一个代码库中工作,并对相同的文件或代码进行更改时。如果没有正确的协调和通信,就会导致冲突。因此,在使用 Git 进行协作开发时,需要密切关注其他人的更改,并努力避免同时更改相同的代码。

第 9 个命令:git branch -d & git branch -D

在命令行窗口的光标处,输入 git branch -d a 命令,删除 a 分支:

一篇文章搞懂Git与Github
如上图所示,我们已经将分支 a 删除啦!不过有的时候,通过 git branch -d 命令可以出现删除不了现象,例如分支 a 的代码没有合并到主分支等,这时如果我们一定要删除该分支,那么我们可以通过命令 git branch -D 进行强制删除。

第 10 个命令:git tag

在命令行窗口的光标处,输入 git tag v1.0 命令,为当前分支添加标签:

一篇文章搞懂Git与Github
如上图所示,我们为当前所在的 master 分支添加了一个 v1.0 标签。通过命令 git tag 即可查看我们添加标签的记录。通过命令 git checkout v1.0 即可切换到该标签下的代码状态。

第11个命令:git push

在命令行窗口的光标处,输入 git push <远程仓库地址> <本地分支名>:<远程分支名> 命令,将当前分支推送到远程仓库:

一篇文章搞懂Git与Github

如上图所示,master 分支被推送到远程仓库,远程仓库无 master 分支,所以自动创建了 master 分支。

第12个命令:git clone

在命令行窗口的光标处,输入 git clone <远程仓库地址> 命令,将远程 Git 仓库拷到本地,让自己能够查看该项目,或者进行修改。

一篇文章搞懂Git与Github

Git 命令大全

创建版本库

git clone <url>:从网络上某个地址拷贝仓库 (repository) 到本地
git init:在本地的当前目录里初始化 git 仓库,会在当前目录生成一个隐藏的 .git 目录

修改与提交

git status: 查看当前仓库的状态
git diff: 显示暂存区和工作区的差异
git add: 添加当前目录下的所有文件到暂存区
git add <file1><file2>: 添加一个或多个文件到暂存区
git mv <old> <new>: 文件改名
git rm <file>: 将文件从暂存区和工作区中删除
git rm --cached <file>: 把文件从暂存区域移除,但仍然保留在当前工作目录中
git commit -m "commit message": 提交暂存区到本地仓库中,提交信息最好能体现更改了什么

查看提交历史

git log: 查看当前版本及之前的 commit 记录
git log -p <file>: 查看指定文件的提交历史
git blame <file>: 以列表形式查看指定文件的提交历史

分支与标签

git branch: 列出分支基本信息
git branch <new-branch>: 创建新分支
git branch -d <branch>: 删除分支
git checkout <branch/tag>: 切换到指定分支或标签
git checkout -b <branch>: 创建并切换到新分支
git switch <branch>:切换到指定分支
git switch -c <branch>:创建并切换到新分支
git tag: 列出所有本地标签
git tag <tagname>: 基于最新提交创建标签
git tag -d <tagname>: 删除标签

合并与衍合

git merge <branch>: 合并指定分支到当前分支
git rebase <branch>: 衍合指定分支到当前分支

远程操作

git remote -v: 查看所有远程版本库
git remote show <remote>: 显示某个远程仓库的信息
git remote add <shortname> <url>: 添加远程版本库
git fetch <remote>: 从远程库获取代码
git pull <remote> <branch>: 下载代码及快速合并
git push <remote> <branch>: 上传代码及快速合并
git push <remote> :<branch/tag>: 删除远程分支或标签
git push --tags: 上传所有标签文章来源地址https://www.toymoban.com/news/detail-461167.html

到了这里,关于一篇文章搞懂Git与Github的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【运维知识高级篇】一篇文章带你搞懂Git!(Git安装+全局配置+Git初始化代码仓库+Git四大区域+Git四种状态+Git常用命令+Git分支+Git测试代码回滚)

    版本流程控制系统(version control system)是一种记录一个或若干个文件内容变化,以便将来查阅特定版本内容情况的系统,它会记录文件的所有历史变化,我们可以随时恢复到任何一个历史状态,同时支持多人协作开发。 目录 常见的版本管理工具 Git安装与全局配置 Git初始化

    2024年02月02日
    浏览(55)
  • 一篇文章搞懂华为的ACL

    随着网络的飞速发展,网络安全问题日益突出。访问控制列表 (ACL, Access Control List) 可以通过对网络中报文流的精确识别,与其他技术结合,达到控制网络访问行为、防止网络攻击和提高网络带宽利用率的目的,从而切实保障网络环境的安全性和网络服务质量的可靠性。 访问

    2024年02月06日
    浏览(43)
  • 一篇文章让你搞懂内存函数

    库函数memcmp介绍 函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。 这个函数在遇到 ‘\\0’ 的时候并不会停下来。 如果source和destination有任何的重叠,复制的结果都是未定义的。 库函数memcmp的代码形式 看代码 memcmp将arr1中的内容拷贝到arr2中,总共

    2024年02月17日
    浏览(42)
  • 搞懂TVS管,有这篇文章就够了

    摘要:本文主要介绍TVS的工作原理、关键参数和选型。 TVS(Transient Voltage Suppressors,瞬态电压抑制器)又称雪崩击穿二极管,是一种高效电路保护器件,主要是保护电路不受瞬态高压尖峰脉冲(静电或雷击浪涌)的冲击。 TVS是采用半导体工艺制成的单个PN结或多个PN结集成的器件,

    2023年04月08日
    浏览(50)
  • 一篇文章带你搞懂前端Cookie

    浏览器Cookie相信各位点进这篇文章的小伙伴应该不陌生了,它是前端领域中一个非常重要的内容,当然也是面试的一个考点,不知道各位小伙伴是否真正掌握了Cookie呢?当然没有掌握也是没有关系的,可以跟着小编的脚步一起来学习一下前端Cookie,没有熟练掌握的小伙伴看完这

    2024年02月04日
    浏览(43)
  • 一篇文章带你搞懂stm32工程文件

    本文以stm32f4为例,讲解stm32标准库工程中各个文件的作用,学艺不精,如有错误,望大家私信或评论指出。 先看思维导图 startup_stm32f427xx.s  该文件是stm32的启动文件,由汇编语言编写,主要是做stm32上电时的配置设置(如堆栈指针,时钟数)并跳转到main函数中,执行c代码。

    2024年02月21日
    浏览(49)
  • 一篇文章搞懂前端sso需要做什么

    父域 Cookie 认证中心 LocalStorage 跨域 一般情况下,用户的登录状态是记录在 Session 中的,要实现共享登录状态,就要先共享 Session,但是由于不同的应用系统有着不同的域名,尽管 Session 共享了,但是由于 SessionId 是往往保存在浏览器 Cookie 中的,因此存在作用域的限制,无法

    2024年02月20日
    浏览(45)
  • Unity/C#------委托与事件(一篇文章彻底搞懂...)

            所有的代码语言创造者母语都是英语,我们从英语翻译到中文的过程中难免会存在一些不太能还原本意的词,比如我之前一直不理解构造函数和析构函数,只知道这俩货作用相反,直到我看到了它的英文意思,Construstor/Distructor,我才彻底理解了他们的作用。      

    2024年02月06日
    浏览(48)
  • 什么是区块链?一篇文章搞懂区块链本质

    鉴于我对区块链的关注,以及很多关注我的朋友们,并不是很清楚区块链的本质和潜力点,所以今天在地铁里疏离了一下,并分享给大家。 你见过钱吗?我相信你是没见过真正的钱的。 这是钱吗? 这是“钞票”,而不是钱!这不是抠字眼,且听我细细道来。 别人管你借钱的

    2024年01月22日
    浏览(43)
  • 一篇文章让你搞懂自定义类型-----结构体

    结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量 例如描述一个学生 在声明结构的时候,可以不完全的声明 比如 上面的两个结构在声明的时候省略掉了结构体标签(tag) 那么问题来了 警告: 编译器会把上面的两个声明当成完全不同的两个

    2024年02月16日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包