Git简单入门(学习笔记)

2023-11-08

Git简单入门(学习笔记)





一. Git概念

  Git是一个免费的开源的分布式版本控制系统,可以快速高效地处理从小型到大型的项目。


二. 版本控制

  版本控制是一种记录一个或若干个文件内容变化,以便将来查阅特定版本修订情况的系统。

  版本控制的好处在于可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态。也可以比较文件的变化细节,从而查看是谁修改了什么地方,导致的一些问题,等等。

  *举个例子:假如你今晚需要上线软件的4版本,但在这过程中测试人员发现4版本里有bug,而开发人员无法及时赶来修改bug,这时便可以运用版本控制回溯到之前的3版本。

  版本控制系统分为两大类:集中化版本控制系统(常见的有SVN,CVS等)和分布式版本控制系统(常见的有Git)。

在这里插入图片描述

  集中化版本控制系统都有中央服务器,不同的开发人员可以直接连接服务器获取数据,以及提交下载等等。每个人都可以在一定程度上看到项目中的其他人正在做些什么。但缺点是中央服务器的单点故障。

  *举个例子:如果服务器宕机一小时,那么在这一小时中,谁也无法提交更新。假如这个时候你把软件的4版本修改的一塌糊涂,这时你想回溯到3版本,但因为中央服务器宕机,你无法进行操作。(遇到这种情况建议提前备份,这样回溯时可以用备份)。

  分布式版本控制系统中,客户端并不只是提取最新版本的文件快照,而是把代码仓库完整的镜像下来。这时每个客户端上都有最新版本和历史版本,这样一来每个客户端都相当于服务器,就算服务器都宕机了,但只要有一个客户端是好的,就没问题。这里也是一个去中心化的思想

  而且,许多这类系统都可以指定和若干不同的远端代码仓库进行交互,这样,你就可以在同一个项目中分别和不同工作小组的人互相协作。

  分布式版本控制系统在管理项目时存放的不是项目版本与版本之间的差异,他存的是索引(所需磁盘空间很少的所以每个客户端都可以放下整个项目的历史记录)。

  *举个例子:假如你用了SVN存储项目(集中化版本控制系统),当你从版本3迭代到版本4的时候,你存储的并不是版本4,而是版本3与版本4的差异。这时你想从版本4回溯到版本1的话,要先从版本4回溯到版本3,再从版本3回溯到版本2……直到版本1,这是非常耗时的。但,假如你用的是git存储项目(分布式版本控制系统),当你从版本3迭代到版本4的时候,你存储的并不是版本4,也不是版本3与版本4的差异,而是版本3的索引,这时你想从版本4回溯到版本1的话,可以直接找到版本1的索引,这是非常快的。


三. Git下载与安装

详见博客:https://blog.csdn.net/m0_59188912/article/details/123909979


四. Git结构

  本地结构:工作区,暂存区,本地库

在这里插入图片描述

概念:
  写的文件都存在工作区,暂存区里是打算提交的东西,但还没有提交,用作临时存储。本地库里存的都是每个历史版本的信息。

命令:
  工作区提交到暂存区:git add
  暂存区提交到本地库:git commit


五. 本地库与远程库的交互方式

团队内部合作:

  1. 项目经理创建本地库。
  2. 将本地库内容推送到远程库。(push操作)
  3. 程序员将远程库里的内容克隆到本地库。(clone操作)
  4. 程序员将写完的代码推送到远程库。(push操作)(需要加入团队才有权利推送)
  5. 项目经理将远程库里的内容拉取到本地。(pull操作)

在这里插入图片描述

跨团队合作:

  1. A公司项目经理创建本地库。
  2. 将本地库内容推送至A项目经理创建的远程库。(push操作)
  3. B将A的远程库复制一份形成一个新的远程库。(fork操作)
  4. 程序员将远程库内容克隆到本地库。(clone操作)
  5. 程序员推送代码到远程库B。(push操作)
  6. 远程库B→远程库A发起请求。(pull request)
    远程库A审核。
    没有问题就把远程库B的内容合并到远程库A中。(merge)
  7. A公司项目经理或A公司程序员将远程库里的内容拉取到本地。(pull操作)

在这里插入图片描述


六. 代码托管中心

局域网环境:
搭建GitLab服务器等,适用于团队内部合作。

外网环境:
注册GitHub或Gitee(码云)等,适用于跨团队合作。

GitHub官网:https://github.com/

在这里插入图片描述

Gitee官网:https://gitee.com/

在这里插入图片描述


七. 初始化本地仓库

  1. 在本地磁盘中创建文件夹。

在这里插入图片描述

  1. 右键打开Git Bash Her。

在这里插入图片描述

在这里插入图片描述

  1. 右键打开Options设置。

在这里插入图片描述

  1. 设置Character set为UTF-8。

在这里插入图片描述

  1. 设置用户名。
    git config --global user.name “dgyj”

在这里插入图片描述

  1. 设置邮箱。
    git config --global user.email “10086@qq.com”

在这里插入图片描述

  1. 切路径,去之前创建的文件夹的盘里(我之前是在f盘下创建的文件夹,所以我输入的是f:/)。
    cd f:/

在这里插入图片描述

  1. 再继续去之前创建的文件夹里。(我之前创建的文件夹名为GitRepository)
    cd GitRepository/

在这里插入图片描述

  1. Git初始化。
    git init

在这里插入图片描述

  1. 我们可以再检查一下是否有该文件。(.git目录是隐藏的)
    ll -la

在这里插入图片描述

  1. 查看.git里的文件(.git文件里的东西不要乱删和胡乱操作)
    ll -la .git/

在这里插入图片描述

*我的这里的一些显示有点问题,为了避免误导大家这里就用马赛克遮掉了。


八. 常用命令

*在Git中命令和Linux是一样的。

  1. 查看Git安装版本。
    git --version

在这里插入图片描述

  1. 清屏。
    clear

在这里插入图片描述

  1. 将文件提交到暂存区。(我要提交的文件名为test.txt)
    git add test.txt

在这里插入图片描述

  1. 将文件提交到暂存区后查看文件状态。
    git status

在这里插入图片描述

  1. 将暂存区的内容提交到本地库。
    git commit -m "这是我提交的测试文件 test.txt“ test.txt

在这里插入图片描述

注意:
不放在本地仓库中的文件,git是不进行管理的。
即使放在本地仓库的文件,git也不管理,必须通过add,commit命令操作才可以将内容提交到本地库。

  1. 查看提交的日志,由近到远。
    git log

在这里插入图片描述

当一页显示不下,数据过多的时候会有分屏。
下一页:空格
上一页:b
到尾页显示end
退出:q

  1. 日志展示方式二。
    git log --pretty=oneline

在这里插入图片描述

  1. 日志展示方式三。
    git log –oneline

在这里插入图片描述

  1. 日志展示方式四。
    git reflog

在这里插入图片描述

  1. 前进或者后退历史版本。
    git reset --hard a340e1c
    本地库的指针移动的同时,重置暂存区,重置工作区

在这里插入图片描述
在这里插入图片描述

  1. 本地库的指针移动的同时,重置暂存区,但是工作区不动。
    git reset --mixed

  2. 本地库的指针移动的时候,暂存区和工作区都不动。
    git reset --soft
    注意:最常用的就是hard。

  3. 删除工作区中的test.txt。
    rm test.txt

在这里插入图片描述

  1. 将删除操作同步到暂存区。
    git add test.txt

在这里插入图片描述

  1. 将删除操作同步到本地库。
    git commit -m “删除test.txt文件” test.txt

在这里插入图片描述

  1. 找回本地库中删除的文件(实际上就是将历史版本切换到刚才添加文件的那个版本即可)。
    git reset --hard a340e1c

在这里插入图片描述

  1. 比对工作区和暂存区的文件。
    git diff test.txt

在这里插入图片描述

Git是按照行为单位管理数据。所以,删除一行,添加一行。

  1. 多个文件比对时,不用加文件名。
    git diff

在这里插入图片描述

  1. 将暂存区和本地库中的文件进行比对。
    git diff HEAD test.txt

在这里插入图片描述

git diff 2be3d65 test.txt

在这里插入图片描述


九. 分支

  1. 概述
      在版本控制过程中,使用多条线同时推进多个任务,这里面说的多条线就是多个分支。分支的好处有:同时多个分支可以并行开发,互相不耽误,互相不影响,提高开发效率。

  2. 查看当前git里面的所有分支。
    git branch -v

在这里插入图片描述

  1. 创建分支。
    git branch newone

在这里插入图片描述

当前在那个分支上时通过*来显示

  1. 切换分支。
    git checkout newone

在这里插入图片描述

  1. 将newone中的内容和主分支内容进行合并。
    git merge newone

在这里插入图片描述

  1. 文件合并冲突。

在这里插入图片描述
在这里插入图片描述

处在合并状态中

在这里插入图片描述

出现冲突

在这里插入图片描述

在同一个文件的同一个位置,才会出现冲突问题。

解决方法:只能靠人商量,人为决定,留下想要的即可。

  1. 解决完冲突问题后,取消合并状态。

在这里插入图片描述


十. github注册
注册教程详见博客:https://danbaku.blog.csdn.net/article/details/124912340


十一. 创建github远程库

  1. 创建远程库,点击右上角加号,new repository。

在这里插入图片描述

  1. 创建库信息填写。

在这里插入图片描述

  1. 在首页左侧有创建的库,点击进去。

在这里插入图片描述

这就是刚刚创建的远程库的地址

  1. 通过别名在git本地将地址保存。
    查看别名:
    git remote -v

在这里插入图片描述

起别名:
git remote add GitRetest https://github.com/Kevinzhushrek/GitRepository.git

在这里插入图片描述

fetsh:取回
push:推送

在这里插入图片描述


十二. 远程库操作

  1. 远程库推送。
    git push GitRetest master

在这里插入图片描述
在这里插入图片描述

完成

在这里插入图片描述

  1. 克隆操作。
    复制地址:

在这里插入图片描述

git clone https://github.com/Kevinzhushrek/GitRepository.git

在这里插入图片描述

D盘中出现:

在这里插入图片描述

克隆操作可以帮我们初始化本地库、将远程库的内容完整的克隆到本地、替我们创建远程库的别名。

  1. 拉取操作。
    拉取操作pull,相当于fetch操作和merge操作的合并。
    项目经理先确认远程库的内容是否更新了。
    项目经理进行拉取操作。

抓取操作:
git fetch GitRetest master

在这里插入图片描述

执行抓取操作后,只是将远程库的内容下载到本地。工作区中的文件并没有更新,工作区中还是原先的内容。

这时可以切换到下载下来的远程库的master中查看里面的内容。
git checkout GitRetest/master

在这里插入图片描述
在这里插入图片描述

发现没有什么问题即可进行合并操作:
git merge GitRetest/master

在这里插入图片描述

以上两个操作也可以通过一个操作解决:
git merge GitRetest/master

在这里插入图片描述

(未完待续……先学这么多就够了,后面的以后有空更)



本篇博客为本人学习Git时的详细记录,如有错误之处,还望各位指正。
文章为原创,如要转载请注明出处

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Git简单入门(学习笔记) 的相关文章

  • Git 不断提示我输入密码

    我已经使用 Git 一段时间了 但是不断要求输入密码开始让我感到厌烦 我使用的是 Mac OS X 和 GitHub 并且按照 GitHub 的说明设置了 Git 和我的 SSH 密钥设置 Git 页面 http help github c
  • 相当于“svn update -r”的 git 是什么?

    我是最近的 git 转换者 能够使用 git svn 将我的分支保留在本地而不干扰 svn 服务器真是太棒了 最新版本的代码中存在一个错误 我想确定一个它起作用的时间 以便我可以使用 git bisect 我找不到正确的命令来及时返回 谢谢
  • Git:如何变基到特定提交?

    我想变基到特定的提交 而不是另一个分支的 HEAD A B C master D topic to A B C master D topic 代替 A B C master D topic 我怎样才能做到这一点 您可以通过在您喜欢的提交上创
  • 无法使用 git 配置文件进行 ssh

    我知道它被问了很多次 但我无法得到我的问题的答案 我正在尝试使用配置文件 ssh 到系统 配置文件是 Host qa HostName 10 218 70 345 User user IdentityFile C Users bean ss
  • 忽略 git 中的本地配置文件

    Rails 应用程序中有一些本地文件 属于我们存储库的一部分 我希望 git 忽略它们 基本上 我希望 git 忽略我对 config environments 目录和 config application rb 文件中的任何内容所做的所有
  • Jenkins git 插件 - 有时太慢

    以下内容摘自 Jenkins 日志 00 00 03 135 gt git fetch tags progress email protected cdn cgi l email protection some org some repo
  • 推送时发生 Git 错误 - update_ref 失败

    当我尝试推送本地提交时遇到问题 这可能是在 Android Studio 崩溃时发生的 这是错误 update ref 引用 refs remotes origin master 失败 无法锁定 ref refs remotes origi
  • 如何使用交互式变基将提交编辑为未提交?

    我想使用交互式变基来编辑以前的提交 但是当我进入该提交的编辑模式时 所有文件都已提交 我知道我可以进行更改并修改提交 但我希望所有更改最初都未提交 暂存或以其他方式 这样我就可以对其进行编辑 就像在最初提交之前一样 这可能吗 Imagine
  • git diff - 只显示哪些目录发生了变化

    有没有办法只列出已更改的目录 如果我在 git root 的话 project 我更改的文件是 project subtool file1 project subtool file2 project subtool3 file1 我只是想
  • Git:显示分支之间的差异,忽略合并的提交

    我的存储库历史记录看起来像这样 x y z branch a b c d e master 我想获得 branch 完整历史记录的单个差异 即 像 git diff 输出 我不想要像 git log p 产生的一大堆差异 而不包括任何从 m
  • 有没有办法让 git flow 显示它在幕后执行的命令?

    有什么方法可以让 git flow 提前告诉我当我执行 flow 命令时它将执行的确切 git 命令吗 或者告诉我它是东吗 我只能看到输出和摘要吗 你可以使用Git的GIT TRACE 环境变量 http git scm com docs
  • git 显示已添加到 gitignore 的文件中的更改?

    我已经将 log2 文件夹和 main js 文件添加到 gitignore 如屏幕截图所示 但即使执行后git rm cached r我仍然可以看到 git 正在检测 main js 和 log2 文件夹内文件的更改 怎么会 这些的常见问
  • 第一次使用node.js - “ReferenceError:节点未定义”

    我刚刚安装了node js 我尝试编写应该检查版本的node v 但它不起作用 这是输出 gt node v ReferenceError node is not defined at repl 1 2 at REPLServer self
  • 默认情况下 git merge -Xignore-space-change

    我该如何设置该选项ignore space change对于所有合并使用git config 我也许可以使用别名merge 但因为我希望该设置应用于git stash pop git stash apply git pull and git
  • VS 2015 + Bower:在防火墙后面不起作用

    Problem 在 Visual Studio 2015 中 使用 Bower 我的包在防火墙后面时恢复失败 并出现类似以下内容的错误 ECMDERR 无法执行 git ls remote tags heads git github com
  • Netbeans 和 Git,.obj 文件被忽略

    我正在开发一个涉及 obj 文件的小型 git 项目 当我查看 项目选项卡 时 我发现它们被忽略了 但如果我查看我的 gitignore 我无法理解为什么 DepthPeeling nbproject private DepthPeelin
  • git 日志历史记录图,每次提交一行,彩色,带有日期

    我需要的格式如下 git log decorate graph oneline date order 但我也需要它 包含日期 短 具有相同的颜色 I tried git log decorate graph oneline date ord
  • GIT:以下未跟踪的工作树文件将被签出覆盖

    我有两个分支 一个称为 master 另一个称为 dev 我目前位于 master 分支 我想转到 dev 分支将文件移动到开发服务器 但是当我执行 git checkout dev 我收到消息 以下未跟踪的工作树文件将被覆盖 查看 pag
  • 如何克隆特定的 Git 标签

    From git clone 1 手册页 http git scm com docs git clone branch还可以在结果存储库中的该提交处获取标签并分离 HEAD 我试过 git clone branch
  • git 提交错误:检测到大文件

    您好 我正在为 ios 8 1 开发一个应用程序 xcode 我已经使用 googleMaps 框架来实现自动完成功能 当我尝试在 Git 中推送我的项目时 我收到大文件检测错误 后来尝试使用 git lfs 并跟踪 git 检测到的文件

随机推荐

  • html标签(下)----常用高级标签

    下列代码可直接运行 br br br br br 空 nbsp nbsp nbsp 格 div style width 400px height 60px background color darkgrey div
  • Oracle锁机制

    增删改查中查询不需要锁 即使数据被锁定也能在还原信息中查询出锁定之前的值 其余三项均会使用行级锁 直到用户commit或rollbak 锁是在指定语句的最低可能级别自动获取的 增删改获取行级锁而不是块级或表级 修改对象 如移动表 会获取对象
  • 朝代官制,6部是什么

    六部 六部就是我们所熟知的 吏 户 礼 兵 刑 工 它是隋唐以来中央行政机构中的重要一极 隋唐开创的三省六部制最早可以追溯至西周时期 但史料对此记载颇少 当时相应的中央行政机构所管辖的职能远远没有后世开创的六部职能完善 秦朝开创了三公九卿制
  • 星际争霸2神族全兵种介绍

    星际争霸2神族全兵种介绍 貌似很多兵种啊 而且根据目前的demo 兵种相克非常明显的话游戏节奏可能变慢 不知道可玩性会不会像1那么高 星际2神族全兵种公布 2007 6 18 作者 OGame NeT Sodoes 更多精彩尽在神州论坛 翻
  • 一个在终端实现类Linux shell(cd ls命令)UI界面的项目(C语言实现)

    一个在终端实现类Linux shell cd ls命令 UI界面的功能 C语言实现 这2天做了一个类似Linux shell的UI界面 目前已初步完成cd ls help pwd quit等命令 在Linux下实现 效果图见下图 ls命令
  • websocket深入浅出

    websocket简介 websocket是什么 答 它是一种网络通信协议 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议 为什么需要websocket 疑问 我们已经有了 HTTP 协议 为什么还需要另一个协议
  • [STM32WBA]【STM32WBA52CG测评】-3- 蓝牙BLE:LED与button例程分析

    STM32WBA52CG是支持蓝牙BLE 5 3 官方提供的STM32Cube FW WBA V1 1 0资料包中提供了一个非常好的入门案例 BLE p2pServer 准备材料 Keil ST BLE Toolbox 图形化配置时钟 主要
  • QT安装mqtt环境(这里默认以及有了QT)

    首先 QT的版本和mqtt包的版本要一致 我这里QT和mqtt的版本都是5 14 2 QT安装包 5 14 2 下载地址 Index of archive qt 5 14 mqtt包的一个连接 可以选择相应的版本 GitHub qt qtm
  • eclipse easyui 正常代码老是报错 红色波浪线

    即使交换位置 手敲行依旧报错 看了三篇 还是看不出问题 关于正确代码会出现很多红色波浪线 网上的办法是把eclipse软件关闭 然后重新启动即可消除 但是这种方法有个弊端 当再次编辑的时候依旧很出现很多波浪线 尝试了以下两种方法 https
  • Retrofit 2.5 框架使用与源码分析

    Retrofit 2 5 框架使用与源码分析 Retrofit 框架使用 请求内容与返回值 使用PostMan进行请求测试 请求 https api github com search repositories q android 返回值
  • 【计算机视觉

    文章目录 一 检测相关 7篇 1 1 Vehicle Occurrence based Parking Space Detection 1 2 Squeezing nnU Nets with Knowledge Distillation f
  • LeetCode--Intersection of Two Linked Lists (两个链表的交点)Python

    题目 给定两个链表 求这两个链表的交点 若没有交点 则返回空 样例如下 返回交点c1 解题思路 思路1 暴力思路 n方复杂度 对两个链表分别进行遍历 找到相同的节点即可O n m 空间复杂度为O 1 思路2 使用哈希表 即python中的字
  • 6-6 找素数并保存到数组中

    本题目要求查找n m之间所有素数 存入一维数组a中 函数接口定义 int fun int n int m int a 其中 a 为存储的素数 函数返回素数的个数 裁判测试程序样例 include
  • 编译工具链和交叉编译工具链简易说明

    文章目录 编译工具链 交叉编译工具链 编译工具链 做C C 开发特别是嵌入式方向的肯定会涉及编译工具链和交叉编译工具链相关内容 C C 的程序需要经过 gcc 等编译成二进制程序才能被计算机使用 这里的 gcc 通常是泛指 包括 gcc g
  • 关于stm32下载提示internal command error错误提示解决办法

    问题背景 最近新制作了一个关于stm32的PCB PCB电源供电是由12V降压5V 再降压到3 3V 并且预留了3 3V电源接口 打样贴片完成后准备下载程序 一开始我是为了测试方便 没有用12V供电 直接连接stlink 并且用了电脑5V降
  • 高效大数据开发之 bitmap 思想的应用

    作者 xmxiong PCG 运营开发工程师 数据仓库的数据统计 可以归纳为三类 增量类 累计类 留存类 而累计类又分为历史至今的累计与最近一段时间内的累计 比如滚动月活跃天 滚动周活跃天 最近 N 天消费情况等 借助 bitmap 思想统
  • mysql主从配置问题汇总及如何查看数据库的日志

    一 Could not execute Delete rows event on table yxjmanage ums user Can t find record in ums user Error code 1032 handler
  • 原生ajax运行原理,【前端自学之路】JS之原生AJAX原理

    Javascript Ajax 原理 什么是 AJAX AJAX Asynchronous JavaScript and XML 异步Javascript 和 XML AJAX 是指一种创建动态网页的开发技术 说白话点 AJAX 就是允许J
  • Android常见问题debug

    android util Log 常用的方法有以下5个 Log v Log d Log i Log w Log e 根据首字母对应 VERBOSE DEBUG INFO WARN ERROR 另外 Log太多时用来过滤和标识分类log信息
  • Git简单入门(学习笔记)

    Git简单入门 学习笔记 目录 一 Git概念 二 版本控制 三 Git下载与安装 四 Git结构 五 本地库与远程库的交互方式 六 代码托管中心 七 初始化本地仓库 一 Git概念 Git是一个免费的开源的分布式版本控制系统 可以快速高效