Git基本使用教程(学习记录)

参考文章链接:
Git教程(超详细,一文秒懂)

RUNOOB Git教程

Git学习记录

1Git概述

1.1版本控制软件功能

  • 版本管理:更新或回退到历史上任何版本,数据备份
  • 共享代码:团队间共享代码,合作开发

1.2svn与git

在这里插入图片描述
上图来自RUNOOB Git教程

  • svn它集中式的版本控制,不能离线工作。git分布式的版本控制,它版本放在用户自己的电脑。
  • svn不支持离线工作,版本全部都放在是中央服务器。如果中央服务器挂了。那么版本全部丢失。
  • git支持离线工作。版本都放用户自己电脑上完成。---- 分布式的版本控制。
  • svn是项目对仓库,git是仓库对仓库。

1.3Git工作机制

在这里插入图片描述上图来自RUNOOB Git教程

图中左侧为工作区,右侧为版本库。在版本库中标记为 “index” 的区域是暂存区(stage/index),标记为 “master” 的是 master 分支所代表的目录树;HEAD是指向当前分支的一个游标(别名),输入命令时可相互替换;objects 标识的区域为 Git 的对象库,实际位于 “.git/objects” 目录下,里面包含了创建的各种对象及内容

  1. 在工作区写代码(**工作区:**就是你在电脑里能看到的目录。)
  2. git add * 临时存储在暂存区(**暂存区:**英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)),暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中
  3. git commit -m “ xxx” 提交在本地库并描述(**版本库:**工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库),暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树
  4. git push 上传到远程仓库
    在这里插入图片描述上图来自RUNOOB Git教程

1.4Git和代码托管中心

代码托管中心是基于网络服务其的远程代码仓库,简称为远程库

  • 局域网
    • GitLab:自己搭建远程库
    • gogs:极易搭建的自助Git服务
  • 互联网
    • GitHub
    • Gitee

1.5Git安装与配置

#安装
apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \ libz-dev libssl-dev

apt-get install git

git --version
# 输出:git version 1.8.1.2

#配置 gitconfig
# /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config --system ,读写的就是这个文件
#~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config --global ,读写的就是这个文件
#当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量

#下面--global 可以更换为 --system 或不加,意义如上
git config --global user.name "abc"
git config --global user.email abc@qq.com

#查看已有配置信息
git config --list
#输出:user.name=abc user.email=abc@qq.com
# 有时候会看到重复的变量名,那就说明它们来自不同的配置文件(比如 /etc/gitconfig、~/.gitconfig),不过最终 Git 实际采用的是最后一个。

2Git常见命令

git config --global user.name xxx #设置用户名
git config --global user.email xxx #设置用户邮箱
git init #初始化本地库,生成一个 .git 目录,该目录包含了资源的所有元数据,
git init 文件夹名 #指定目录作为Git仓库,会在该目录下生成.git目录,所有Git需要的数据资源都放在该目录

#如果当前目录有几个文件想要纳入版本控制,需要先用git add命令告诉Git开始对这些文件进行跟踪,然后提交:
git add *.c
git add README
git commit -m "初始化项目版本"

git rm #将文件从暂存区和工作区中删除
git mv #移动或重命名工作区文件

git status #查看本地库状态
git add xxx #将xxx文件加入到暂存区
git commit -m "xxx" #提交到本地库并添加日志
git reflog #查看历史记录
git reset --hard 版本号 #版本穿梭
git rm --cached 文件名 #清除暂存区文件
git checkout -- 文件名 #将暂存区中同名文件覆盖到工作区
git checkout 分支名 -- 文件名 #将本地库中同名文件覆盖到暂存区和工作区

git restore #恢复或撤销文件的更改

2.1git status 查看本地库状态

  1. 首次查看,可看到分支,可看到无内容提交
  2. 增加文件后再次查看,文件显示为红色,意味着在工作区,git未追踪该文件

2.2git add 上传工作区文件至本地库

  1. git add xxx
  2. git status 会检测到暂存区有新文件

2.3git commit -m “日志信息” 文件名 提交至本地库

git commit -m 'first commit' hello.txt

2.4修改文件后,文件未被添加到暂存区,需重复上述操作

3历史版本

3.1git reflog 查看提交的版本及日志信息

3.2git log查看完整的提交版本及日志信息

git log [选项] [分支名/提交哈希]

常用的选项包括:

  • -p:显示提交的补丁(具体更改内容)
  • --oneline:以简洁的一行格式显示提交信息
  • --graph:以图形化方式显示分支和合并历史
  • --decorate:显示分支和标签指向的提交
  • --author=<作者>:只显示特定作者的提交
  • --since=<时间>:只显示指定时间之后的提交
  • --until=<时间>:只显示指定时间之前的提交
  • --grep=<模式>:只显示包含指定模式的提交消息
  • --no-merges:不显示合并提交
  • --stat:显示简略统计信息,包括修改的文件和行数
  • --abbrev-commit:使用短提交哈希值
  • --pretty=<格式>:使用自定义的提交信息显示格式

git blame 文件名 以列表形式显示修改记录

3.3版本穿梭

  • git reset 版本号暂存区的目录树会被重写,被定义版本号指向的目录树所替换,但工作区不受影响
  • git rm --cached 文件名会直接从暂存区删除文件,工作区不作出改变
  • git checkout . 或者 git checkout -- 文件名会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区中的改动
  • git checkout 分支名 .或者git checkout -- 文件名会用定义或指向分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

4Git分支操作

4.1分支概述及优点

  • 在版本控制过程中,同时推进多个任务,为每个任务可以创建单独分支,意味着可以将工作从开发主线上分离开来,开发分支不影响主线运行,可理解为副本
  • 并行推进多个功能开发,提高效率
  • 各个分支在开发过程中,单个分支开发失败,不会影响其他分支,失败分支可重新开始

4.2分支操作

git branch 分支名 #创建分支
git branch -v #查看分支
git checkout 分支名 #切换分支
git checkout -b 分支名 #创建新分支并切换
git switch 分支名 #切换分支
git switch -c 新分支名 #创建新分支并切换
git merge 分支名 #把指定的分支合并到当前分支上
git branch -d 分支名 #删除分支
4.2.1查看分支

git branch -v

4.2.2创建分支

git branch 分支名

4.2.3切换分支

git checkout 分支名

4.2.4合并分支

git checkout 主分支

git merge 分支名

  • 分支冲突:当要合并的两个分支存在对同一文件进行修改,git无法确定作哪一修改
  • 解决冲突:修改master中相同文件的内容,不修改合并分支中相同文件的内容
    • 在master分支确定要修改的文件及内容,git add 文件名
    • git commit -m “日志” (后不能加文件名,否则会报错)
    • 合并分支的同文件不做改变,git merge 合并分支名
4.2.5删除分支

git branch -d 分支名

5远程仓库

在这里插入图片描述
上图来自RUNOOB Git教程

5.1在github/gittee上创建远程仓库

5.2远程仓库操作

git remote -v #查看当前所有远程地址别名
git remote add 别名 远程地址 #起别名(第一次)
git push 别名 分支 #推送本地分支上的内容到远程仓库
git clone 远程地址 #将远程仓库的内容科隆到本地(第一次)
git pull 远程库地址别名 远程分支名 #将远程仓库对于分支最新内容拉下来后与当前本地分支直接将合并
5.2.1克隆仓库到本地

git clone 远程地址,执行该命令会默认处于master分支下,也会自动将origin设置成该远程仓库的标识符

git clone 远程地址 新名字克隆仓库并在本地修改仓库名

设置提交代码时的用户信息

git config --global user.name "abc"
git config --global user.email abc@qq.com
#如果去掉 --global 参数只对当前仓库有效。
5.2.2未工作区增加远程仓库
git remote -v #先查看当前所有远程地址一般会叫origin
git remote add 仓库别名 远程地址 #增加远程仓库
git remote -v #再次查看当前所有远程地址
#会有两个仓库,又分别有1个可以推送(push) 一个可以拉取(fetch)

#删除仓库
git remote rm 仓库名
5.2.3推送本地分支到远程仓库

git push 远程仓库地址别名 分支名,推送的最小单位是分支,所以一定要指定分支,例如:git push origin master

5.2.4拉取远程仓库内容

git pull 远程仓库地址别名 分支名,例如:git pull origin master

6版本控制(查看与更新远程分支)

git fetch 获取远程仓库中最新的提交和分支信息,但不会自动合并到当前分支上

例如:git fetch origin 从名为origin的远程仓库获取所有分支的最新更改

git diff 比较本地分支和远程分支之间的差异,避免潜在冲突,例如git diff HEAD origin/分支名,HEAD 是指当前分支的最新提交

然后进行合并:git merge orgin/分支名

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/674725.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大数据的数据采集

大数据采集是指从各种来源收集大量数据的过程&#xff0c;这些数据通常是结构化或非结构化的&#xff0c;并且可能来自不同的平台、设备或应用程序。大数据采集是大数据分析和处理的第一步&#xff0c;对于企业决策、市场分析、产品改进等方面具有重要意义。以下是大数据采集的…

2024 年适用于 Mac 的 5 大免费录屏软件

要成为Mac的优秀屏幕录像机&#xff0c;捕获视频的高清质量和易于操作的界面是两个主要重要因素。此外&#xff0c;Mac上的付费屏幕录像机不仅可以输出高质量的屏幕捕获视频。您也可以在免费的视频捕获软件中获得类似的桌面录制服务。因此&#xff0c;如果您不需要以专业的方式…

Java 异常处理详解(如果想知道Java中有关异常处理的知识点,那么只看这一篇就足够了!)

前言&#xff1a;异常处理是 Java 编程中非常重要的一部分&#xff0c;它能够有效地捕获和处理程序运行中的错误&#xff0c;提高代码的健壮性和可靠性。本文将深入探讨 Java 中异常的概念、体系结构、抛出、解决方式以及如何自定义异常&#xff0c;并结合代码案例进行详细解释…

什么文档加密软件好用?迅软DSE加密软件你不会还不知道吧?

一、什么文档加密软件好用&#xff1f; 其中有迅软DSE文档加密软件等。 迅软DSE加密软件&#xff1a;让企业的创意成果、招投标文件、生产工艺、流程配方、研发成果、公司计划、员工信息等核心数据更安全。 多方面加密模式&#xff0c;有效防止数据泄密 透明无感知加密&…

数据结构C语言版 严蔚敏

下列关于数据的逻辑结构的叙述中&#xff0c;哪一个是不正确的&#xff08;C&#xff09;。 A、数据的逻辑结构是数据间关系的描述B、数据的逻辑结构抽象反映数据元素间的逻辑关系C、数据的逻辑结构具体反映数据在计算机中的存储方式 数据的逻辑结构是从逻辑关系上描述数据&am…

华为云Pass平台微服务治理

华为云Pass平台微服务治理 1. 快速体验 1.1 微服务结构 2. 搭建项目 远程调用 主启动类 RequestSchema指定controller注解并标注控制类名称 3. PASS平台 CSE ServiceComb接入华为云CSE 注意&#xff1a; 当你的接口出现变更&#xff0c;把微服务引擎服务目录重新删除&…

深入理解mysql中的各种超时属性

1. 前言 connectTimeout: 连接超时 loginTimeout: 登录超时 socketTimeout: Socket网络超时&#xff0c;即读超时 queryTimeout: sql执行超时 transactionTimeout:spring事务超时 innodb_lock_wait_timeout:innodb锁等待超时 netTimeoutForStreamingResults:mysql server网络回…

U盘感染病毒,不必急于扔掉!教你如何有效清除U盘中的病毒

U盘被感染了只能扔掉吗&#xff1f;随着信息时代的飞速发展&#xff0c;U盘已成为我们日常生活中不可或缺的存储设备。然而&#xff0c;在使用U盘的过程中&#xff0c;我们有时会遇到U盘被病毒感染的情况。面对这一问题&#xff0c;许多人可能会感到恐慌&#xff0c;甚至想要直…

Ubuntu22.04之解决:terminal使用alt+1/alt+2/alt+3失效问题(二百三十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

UML实现图-组件图

概述 组件图(ComponentDiagram)描述了软件的各种组件和它们之间的依赖关系。组件图中通常包含4种元素:组件、程序、包、任务&#xff0c;各个组件之间还可以相互依赖。 一、组件的表示法 组件是定义了良好接口的物理实现单元&#xff0c;是系统中可替换的物理部件。在一般情…

动物群体甲基化如何讲故事?

DNA甲基化是DNA化学修饰的一种形式&#xff0c;能够在不改变DNA序列的前提下&#xff0c;改变基因表达&#xff0c;从而使表型发生变化。DNA甲基化是一种非常保守的表观遗传修饰&#xff0c;其广泛存在于生物体内&#xff0c;在不同的物种间、相同物种不同环境&#xff0c;同一…

学完PMP,怎么应用到实际工作中?

学习理论知识只是第一步&#xff0c;其目的是为了在实际工作中能够提供帮助。我相信题主的问题也是许多人共同面临的。PMP的知识体系是专业项目管理所必须掌握的知识体系。俗话说&#xff0c;有备无患&#xff0c;具备专业的理论知识就是最好的准备。废话不多说&#xff0c;举几…

使用 zxing 生成二维码以及条形码

需求背景 前期在做项目的时候&#xff0c;有一个需求是说要生成一张条形码&#xff0c;并且呢将条形码插入到 excel 中去&#xff0c;但是之前一直没有搞过找个条形码或者是二维码&#xff0c;最后是做出来了&#xff0c;这里呢就先看看怎么生成&#xff0c;后面再抽时间来写写…

6.3 cf 944

Problem - C - Codeforces 思路 分四种情况&#xff0c;以12为分界点 &#xff08;紫色部分是最初思路&#xff0c;但不包含所有情况&#xff09; 只看在a<b c<d 时的图 代码 #include <bits/stdc.h> using namespace std; #define IOS ios::sync_with_stdio(…

web前端三大主流框架指的是什么

web前端三大主流框架是什么&#xff1f;前端开发师的岗位职责有哪些&#xff1f;这边整理了相关内容供大家参考了解&#xff0c;请各位小伙伴随小编一起查阅下面的内容。 web前端三大主流框架 web前端三大主流框架是Angular、React、Vue。 1.Angular Angular原名angularJS诞生…

OJ3376无尽的石头问题

答案&#xff1a; #include<bits/stdc.h> using namespace std; const int N10e7; int fx(int n) {int sum0;while(n){sum(n%10);n/10;}return sum; } int main() {int t,n,x;cin>>t;while(t--){cin>>n;int count0;for(int i1;i<N;){if(in){cout<<…

网关(Gateway)- 自定义过滤器工厂

自定义过滤工厂类 DemoGatewayFilterFactory package com.learning.springcloud.custom;import org.apache.commons.lang.StringUtils; import org.springframework.cloud.gateway.filter.GatewayFilter; import org.springframework.cloud.gateway.filter.GatewayFilterChai…

FreeRTOS【16】直达任务通知使用

1.开发背景 直达任务通知&#xff0c;FreeRTOS 的线程任务提供的接口&#xff0c;可以用作线程唤醒&#xff0c;或者是传递数据&#xff0c;因为是基于线程本身的操作&#xff0c;是轻量级&#xff0c;速度响应更快&#xff0c;适合小内存芯片使用。 事实上本人使用得比较少&am…

pytorch笔记:自动混合精度(AMP)

1 理论部分 1.1 FP16 VS FP32 FP32具有八个指数位和23个小数位&#xff0c;而FP16具有五个指数位和十个小数位Tensor内核支持混合精度数学&#xff0c;即输入为半精度&#xff08;FP16&#xff09;&#xff0c;输出为全精度&#xff08;FP32&#xff09; 1.1.1 使用FP16的优缺…

大渡口数字经济产业商会暨尼伽OLED透明屏产品发布会

2024年5月31日&#xff0c;大渡口数字经济产业商会成功举办了一场盛大的“商会数字经济发展项目签约大会”&#xff0c;活动上不仅深入探讨了构建“义渡新质生产力”及如何更好地“建功重庆西部大开发”的战略议题&#xff0c;还正式与尼伽OLED宣布达成战略合作伙伴关系&#x…