【个人笔记】Git

news2024/9/22 1:30:00

Tiltle: Github 使用


📖 快速使用


音标:[ɡɪthʌb]

0 介绍

  • Github是一个面向开源与私有软件项目的 托管平台,Git源自其内部的版本库格式.
  • 2008年上线,18年被微软收购;
  • 有很多知名的开源项目:jQuery、python等
  • Github有企业版,要付钱. 免费用户只能使用公共仓库,代码要公开;付费用户可建立私人仓库.

1 Git 入门

1.1 准备工作

  1. 注册github账户
  2. 下载安装git
  3. … 懒得写了

1.2 是否用ssh

  • 前言

    分成用 https url进行 git clone,和用 ssh url 进行clone;

    区别

    1. https url 进行clone时方便,谁的项目都能随便 colne;用ssh url 进行clone麻烦,必须是项目的拥有者,需配置配置和添加 ssh key;
    2. 用https url的,push时需要用户名和密码(得project开了权限),这样不方便也不安全;ssh在push时方便又安全,不需要用户名,若ssh设置了密码就需要密码,不然密码都不需要;

    github生成ssh密钥教程 CSDN

1.3 project的建立到简单flow

  • git init

    把当前路径,新建仓库并初始化

    在当前目录中生成本地的git管理与文件夹 (.git/

  • 配置个人信息

    1. git config --global user.mail "我邮箱@?.com"

    2. git config --global user.name "我的usr name"

    全局设置个人commit的usr name、邮箱

    取消的方式:git config --global --unset user.mail 以及 --unset user.name

    设置全局,就是所有项目commit时都用这个;在公司电脑上不知道会不会影响别人,我把global撤了;

    不想设置全局的话,就删掉--global

    • 查看是否设置成功:输 git config --list

      会打印本地project的 .git/config 中的内容,会显示user和email设置信息

  • git add 文件

    没报错,就成功地把文件加入到了仓库的暂存区

    git add . 加入所有文件

    • 注意:git add .git add -A的区别

      git add .是当前path下,文件变化都加入到暂存区,不包括“删除”

      git add -A 或者 git add --all是所有path下,==整个项目的文件变化(包括删除)==都加入到暂存区。

  • git commit -m '注释' (是短注释)

  • git commit -a (弹窗长注释)

    上传当前版本

  • git push -u origin master

    提交到网络上

1.4 常用指令

  • git clone 路径 —— clone项目

    git clone 目标path 我path

    自定义clone后文件名

  • git branch [option] —— 列出(查看)所有本地分支,当前分支上标了*

    常用option:

    1. -r 查看远程分支
    2. -a 查看所有分支

    git branch A —— 建新分支A

  • git checkout A —— 切换为分支A

  • git pull —— 更新remote 的branch信息

  • git log —— 查看提交日志

    git log --oneline —— 精简模式

2 常见情景/需求

2.1 branch操作

查看分支是否是最新的
  • git diff HEAD origin/分支名

    不是最新,就会有内容打出来。

  • 或者重新 git pull,如果最新的话,会说的。

删除本地分支
  • 直接暴力删除此branch

    git branch -D 分支名,就是-delete -force的意思。

  • merge后改分支的名称

    • 在当前分支上修改此分支名称

      git branch -m 新名字

    • 修改任意分支的名字

      git branch -m 分支名 新名字

  • merge后删除

    git branch -d 分支名即可

2.2 commit操作

  • commit_ID不需要写全,写前几位就好了!
git log只显示一条
  • git log --prettt=oneline
回滚到之前的commit
  1. git reset --hard commit_ID

    hard是强制回滚。要慎用!

⭐️ 撤回上一次的commit
  • git reset --soft HEAD^

    1. --soft 不删除工作区代码的改动,不撤销add,仅仅是撤销commit;

      其他代替:--mixed默认参数:不删除工作区代码的改动、撤销add、也撤销commit;

      --hard:既删除工作区代码的改动、也撤销add、也撤销commit;

    2. HEAD^ 意思是上个代码版本,等价于 HEAD~1

      其他代替:若想把上次commit、上上次commit也撤掉,就写HEAD~2.

  • 一不小心执行多了,撤销了以前的commit,咋办!!💢

    1. git reflog

    2. 复制选择黄色的ID数字

      在这里插入图片描述

    3. git reset --soft [id]

      就可以回到之前commit的状态了!偶也!

删除上一次commit——(这个好复杂,底层原理没看懂)
  1. git commit rebase -i commit_ID 打开这次commit之后的(不包含此次)commit记录。

  2. 把后面几条commit记录,从pick改成drop;(但我实验后报错说,“没有drop命令”)…

  3. 重新git log,可以看到commit记录没了已经。但目前还是rebase状态,还没退出去呢。

    如果出现第二点的报错(说没有“drop”命令)的话,commit记录依然会没有的,直接在此时commit就好了。

  4. git rebase --continue退出rebase即可。

修改上一次commit的注释
  • flow

    git commit --amend,弹窗后修改注释即可

    注:此句依然具有commit的效果

合并多次commit的记录
  • flow

    把我搞死,好不容易才试出来.

    1. 先把当前状态commit掉先:

      git add -A 把所有变化都放入暂存区(git add .对大项目没用的);

      git commit提交掉。

    2. git log ,查看提交日志;

    3. git rebase -i commit_ID ,ID选择最前面“不要被合掉的log”;

    4. 会弹窗,多个log的记录。第一条必须是pick开头,后面几条的pick全改成s,即squash.

      注:必须第一条是pick。

      保存退出。

    5. 此时进入rebase状态,用git log查看,只剩第一个commit log了,就在这个状态下重新git add -A 然后 git commit --amend

    6. git rebase --continue,退出rebase,弹出日志,直接保存退出即可。

    7. 中途如果不想折腾了,用git rebase --abort即可中断。

  • 理解 git rebase

    git rebase是把当前的代码放在暂存区(stash),在保证当前工作区是干净的情况下(也就是得在刚commit后),把以前branch的code拉到本地(工作区)。然后把工作区和暂存区的代码合并。

  • 暂存区有什么异常或者报错

    就用git status,查看一下。

2.3 文件追踪

查看那些文件被git追踪
  • git ls-tree -r master --name-only,不想显示子目录,就去掉-r哈。
屏蔽/忽略/unstaging部分文件

设置了,这些文件就不会被git add算入了。

  • 工程目录中新建一个.gitignore文件,里面写上要unstaging的文件名

    demo:

    # 忽略(unstage)所有 .log 后缀文件
    *.log
    
    # 忽略所有子文件夹中,名称为temp的文件夹
    temp/
    # 忽略的文件夹中,额外有某个文件要stage
    !temp/important.md
    
    # 仅忽略某个指定路径的文件夹内的数据
    /text.txt
    

    更多语法,见:Git .gitignore ——w3school

📖 git 细说


1 工作区与分支

工作区、暂存区、版本库

  • 工作区(working directory/workspace/project folder)

    电脑肉眼可见的文件目录

    是下图的 绿色。存项目文件的。

  • 暂存区(staging area/index)

    位置在.git/index中,故又称“索引”;

    是下图的 蓝色肚子里的白色,存**git add**的staging文件信息。

  • 本地版本库(local repository/repo)

    为工程path下的隐藏文件.git/object

    是下图的 蓝色。存版本、节点信息的,装的是各种**git commit**内容。

  • 远处版本库(remote repo):服务器上的repository.

  • 关系如下图:

    img

  • Head就是指向“当前active的分支”的游标,可以根据我们的切换(checkout)跳来跳去;

  • 各种git操作对三个区的影响

    • git add:会基于文件修改,更新到index(staging area);

    • git commit:把staging area的东西存入objects中来;

    • git checkout .:用staging area的内容,替换工作区的文件。

      故若工作区文件未保存,将被清除。

    • git checkout HEAD .:会替换staging area以及工作区的文件。

      两边的文件若未保存,将被清除。

    在这里插入图片描述

分支

没写

2 rebase指令 (commit修改)

  • 不错的ref:【git 整理提交】git rebase -i 命令详解 CSDN

  • rebase时,对commit_ID的操作有:

    • pick,正常提交(commit)

      改变顺序的话,commit的顺序也会改;删掉的话,commit的记录也会删掉;

    • squash

      多个commit合并,向old的记录合并;

    • 其他

      懒得写。

3 reset (版本回退)

简要用法

  • 理解git的存档与时间穿梭关系

    1. 在git中,commit就是一个存档点;

    2. 当前所处的commit版本是HEAD,上一个版本是HEAD^,上上个版本是HEAD^^,往上100个版本是HEAD~100

    3. 版本回滚一次是:

      git reset --hard HEAD^

      后悔了,取消回滚咋办——terminal还没有关掉时,输入:

      git reset --hard 原来的commit_ID.

      不小心关机了,开机后很后悔想取消回滚咋办——可以用git reflog查看自己的所有git操作,里面会显示自己在之前节点操作的commit_ID,然后再用reset指令恢复(同上)。

细节语法

  • 不同option

    • --mixed模式

      也就是默认的git reset模式。

      回退

其他(未整理)

  • RHEL系统安装 git:

    【忙了一天,发现可以联网,我没设置好,晕倒】

    因为redhat企业系统 不能联网,安装git得自己下source code编译安装;但我RHEL系统库确实,不能联网下载安装很痛苦和麻烦。

    1. git官网 上去下载RHEL版本的git的source code

    2. 拷贝到RHEL系统中

    3. 解压:tar -vxf git-file.tar.gz

    4. 进入此文件夹;

    5. 编译①:./configure --prefix=/usr/local/git

    6. 编译②:make

    7. 安装:su
      make install

    8. 添加环境变量:

      ~/.bashrc 中追加一行:export PATH=$PATH:/usr/local/git/bin

    9. 查看是否安装完成:git --verision

    然后我出现了问题——“编译①”时,说zlib.h not found ,因为我的RHEL不能联网,只能继续离线安装zlib-devel 了:

    1. 去zlib官网 下载source code;

    2. 拷贝到RHEL系统中

    3. 解压:tar -xvzf zlib-file.tar.gz

    4. 进入此文件夹;

    5. 编译①:./configure

    6. 编译②:make -j4

    7. 安装:su
      make install

      搞定!注意,我看了一些网站用的编译①和编译②都不一样,比如用的是make,但我失败了,安装完还是扫描不到zlib.h,即使我在路径里看得见。改成现在的写法就ok了。真不容易。

  • git工程打包,包含log日志

    git archive --output "./output.tar.gz" master

    默认是 tar.gz 格式,对master分支进行打包。

    ❓ 我好像失败了?

    但是直接文件用tar打包,git文件直接就在里面了,方便多了。

origin

  • 前言

    git里关于origin分支等部分的内容,一直没搞明白。

  • Ref

    git中origin master详解

  • 概括

    origin远程仓库(remote repository) 的默认仓库名,用来指代远程github上的仓库版本,不然总不能每次都用url来指代远程仓库吧~

    git remote -v查看所有远程分支名称,可以看到git clonegit pull下来的分支,默认名称是origin.

    当然,可以自己改。

    这样在push的时候,就知道是push给谁了。即,git push 仓库别名 推上去新建的分支名称

    • git remote add 新名字 git仓库链接 来“添加远程仓库”,同时能取别名。

      新建仓库时,起名字;

    • git remote rename 老名字 新名字 来给已有的远程仓库“换名字”。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android Framework(三)Activity启动流程

文章目录 大纲总体流程 第一阶段:点击图标启动应用流程概览SourceActivity端处理system_service处理启动请求参数的构建activityInfo的解析创建ActivityRecord 窗口层级树的处理获取Task--getOrCreateRootTaskActivityRecord挂载到Task--setNewTask移动Task到容器顶…

最新!yolov10+deepsort的目标跟踪实现

目录 yolov10介绍——实时端到端物体检测 概述 主要功能 型号 性能 方法 一致的双重任务分配,实现无 NMS 培训 效率-精度驱动的整体模型设计 提高效率 精度提升 实验和结果 比较 deepsort介绍: yolov10结合deepsort实现目标跟踪 效果展示…

Elasticsearch的部署和使用

首先对java来说,我们可用的有原生elasticsearch和经过spring二次封装的spring data elasticsearch. 后者自带了一些方法,类似于mybatisplus,可以直接使用,十分方便. 如果是spring项目都建议使用第二种,除非你要深度使用. 首先是服务器的部署.部署之前要知道版本,我在部署时遇到…

GoLang:Go语言开发环境的配置

Go语言 Go语言开发环境的配置 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/a…

一款管理苹果设备的软件iMazing3中文破解安装激活教程

iMazing3官方版是一款管理苹果设备的软件,是一款帮助用户管理 IOS 手机的PC端应用程序,能力远超 iTunes 提供的终极 iOS 设备管理器。在iMazing官方版上与苹果设备连接后,可以轻松传输文件,浏览保存信息等,功能比Itune…

NDK编译c/c++文件成so库

目录 背景 Android NDK下载及配置 工程准备 创建Android.mk文件 创建Application.mk文件 编译项目 总结 背景 做算法开发,有时需要将算法编程成so库给其他人调用,很多时候都是在Android平台上使用,这样就会使用到Android NDK进行编译&…

高职院校大数据分析与可视化微服务架构实训室解决方案

一、前言 随着信息技术的飞速发展,大数据已成为推动社会进步与产业升级的关键力量。为了培养适应未来市场需求的高素质技术技能型人才,高职院校纷纷加大对大数据分析与可视化技术的教学投入。唯众,作为国内领先的职业教育解决方案提供商&…

论文速读|大型语言模型作为通用模式机器

项目地址:Large Language Models as General Pattern Machines 本研究探讨了大型语言模型(LLMs)作为通用模式机器的潜力,特别是在机器人技术领域。研究发现,LLMs 能够在没有额外训练的情况下,通过上下文学…

这才是HR想看到的应届生简历

速创猫今天给大家分享的是应届毕业生简历优化案例,希望对大家求职有帮助。速创猫总结了以下七条简历制作干货,希望对大家有帮助: 简洁明了:简历不是自传,不需要长篇大论。保持每份简历在一页纸内,突出关键…

Linux(CentOS)同步服务器时间之~chrony

Chrony 是一款开源的网络时间协议(NTP)客户端和服务端软件,旨在提供高精度的时间同步功能。相较于传统的 NTP 实现如 ntpd,Chrony 提供了一些改进和优势,包括更快的同步速度、低延迟、低CPU占用和低内存消耗。以下是 C…

c++ 154 引用

#include<iostream> using namespace std; //引用作为函数参数不需要初始化 void myswap(int *a,int *b) {int c 0;c *a;*a *b;*b c; } void main03() {int a 10;//引用语法 Type & name var;int& b a;b 100;//相当于把a改成100&#xff1b;printf("…

素材无水印素材网站在哪下载?高清的无水印素材资源库分享

找高清无水印素材&#xff1f;蛙学网、Pixabay 等资源库全揭秘&#xff01; 创意十足的你&#xff0c;是不是常为网上素材的烦人水印而头疼&#xff1f;总在寻找高清、干净、无水印的素材资源&#xff0c;却无从下手&#xff1f;别急&#xff0c;今天就为大家推荐几个超实用的…

c++应用网络编程之八SOCKET探究

一、socket 在目前主流的网络通信中&#xff0c;SOCKET编程其实就是网络编程的代名词。在前面反复提到socket&#xff0c;那么socket到底是什么呢&#xff1f;英文的愿意是“插座、槽”的意思。这里虽然不讲解传统的网络协议但不得不简单说明一下。 首先从宏观上看&#xff0c…

《数字信号处理》学习01-离散时间信号与序列的卷积和运算

目录 一&#xff0c;信号 二&#xff0c;序列的运算 1&#xff0c;卷积和 2&#xff0c;matlab实现 相关的电子书籍请到这篇文章所在的专栏&#xff0c;并通过夸克网盘链接下载。 很多简单的知识点我就不再赘述了&#xff0c;接下来就着重记录我学习过程中遇到的较难理…

class 3: vue.js 3 计算属性

计算属性是一种Options API&#xff0c;Options API是一种通过对象定义属性、方法等框架API的方式我们知道&#xff0c;在模板中可以直接通过插值语法显示一些data属性中的数据。但是在某些情况下&#xff0c;可能需要对数据进行一些转化操作之后再显示&#xff0c;或者需要将多…

PostgreSQL技术内幕5:PostgreSQL存储引擎从磁盘到内存的读取

文章目录 0.简介1.背景知识1.1 计算机存储结构1.2 数据库常见的磁盘和内存访问形式 2. 整体获取层次3.元组介绍4. Buffer管理4.1 Buffer组成4.2 修改后落盘4.3 获取buffer页的流程 5.存储管理器&#xff08;SMGR)6.磁盘管理器&#xff08;MD)7.虚拟文件管理器&#xff08;VFD)8…

【攻防世界新手入门】simple_js

小宁发现了一个网页&#xff0c;但却一直输不对密码。&#xff08;Flag格式为 Cyberpeace{xxxxxxxxx} &#xff09; 该题来自攻防世界新手练习区的 GFSJ0480。 访问靶场&#xff0c;输入任意密码&#xff0c;弹出错误窗口并加载空页面&#xff0c;使用检查器查看对应源代码&…

zdppy+vue3+onlyoffice文档管理系统实战 20240901 上课笔记 基于验证码登录功能基本完成

遗留的问题 1、点击切换验证码2、1分钟后自动切换验证码 点击切换验证码 实现步骤&#xff1a; 1、点击事件2、调用验证码接口3、更新验证码的值 点击事件 给图片添加点击事件&#xff1a; <img :src" data:image/png;base64, captchaImg"style"widt…

ffplay源码分析(五)包缓存队列和帧缓存队列

在音视频处理流程中&#xff0c;ffplay的有两种队列&#xff0c;包缓存队列&#xff08;Packet Buffer Queue&#xff09;和帧缓存队列&#xff08;Frame Buffer Queue&#xff09;。这两个队列的存在&#xff0c;是为了适应音视频数据处理过程中的多线程架构——包括收包线程、…

win11+vscode+Flutter 开发环境配置

https://blog.csdn.net/Oven_maizi/article/details/126804404 1 vscode插件 安装 安装红框中的两个 2 flutter sdk 安装 dart sdk 包含在flutter sdk 里面&#xff0c;路径&#xff1a;flutter_windows_3.24.1-stable\flutter\bin\cache\dart-sdk 方式1&#xff1a; 通过…