【个人笔记】Git

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.rhkb.cn/news/414439.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在 CentOS 6 上安装 Nagios

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 Status: 已弃用 本文涵盖的 CentOS 版本已不再受支持。如果您目前正在运行 CentOS 6 服务器,我们强烈建议升级或迁移到受支持…

STM32H750+CubeIDE+FreeRTOS+ETH(LAN8720A)+LWIP

文章目录 STM32H750CubeIDEFreeRTOSETH(LAN8720A)LWIPCubeIDE配置RCC时钟树SYSETH串口MPUFreeRTOSLWIPGPIO然后就可以点击生成代码了! 代码修改printf重定向补充硬件复位更改补充链接文件然后就可以编译下载ping成功了! socket网络编程 STM32H750CubeIDE…

【计算机网络】浏览器输入访问某网址时,后台流程是什么

在访问网址时,后台的具体流程可以因不同的网站、服务器和应用架构而异。 实际过程中可能还涉及更多的细节和步骤,如缓存处理、重定向、负载均衡等。 此外,不同的网站和应用架构可能会有不同的实现方式和优化策略。 部分特定网站或应用&#x…

云计算第二阶段---DBA Day8-Day9

DBA Day8 该阶段的2天内容,都会和数据库中间件,集群配置有关. 什么是中间件? 通俗来说,就是在正式文件内容从客户端发送或获取请求时,在传播过程中地点中间商,负责管理请求,并对其进行分类。 环境准备: 准备…

AssetsBundleExtractor中文汉化版2.2

感谢-DJ小良汉化 AssetsBundleExtractor工具是一款 人类黎明游戏的assest修改工具 和MOD制作所需要的一款软件 下载地址:https://pan.quark.cn/s/b8104b849fbe

23种设计模式之模板模式

一.什么是模板模式 ‌‌模板模式是一种行为型设计模式,它定义了一个算法的骨架,而将一些步骤留给子类实现。‌这种模式允许子类在不改变算法结构的基础上,重新定义算法的某些步骤。模板模式属于行为型设计模式,主要用于处理那些需…

SpringBoot应用打成ZIP部署包

背景 平常开发SpringBoot应用,打包的时候一般都是按默认的打包方式把所有资源、源码和依赖统一打到一个jar包,这种打包方式方便快捷。最近开发项目遇到一个需求,需要把项目中的配置文件和/bin目录中的启停脚本打到SpringBoot应用jar之外&…

「bug」nvitop ERROR: Failed to initialize curses

nvitop 作为一个优秀个 Nvidia显卡查询库,简单易用且显示信息十分丰富,相比 Nvidia-smi 更方便,简直是每个 开发人员必备的库,安装也十分方便,直接采用 pip install nvitop 即可,调用的时候也是直接在 Term…

Redis:Redis性能影响因素

这里写自定义目录标题 一、CPU对Redis的影响二、磁盘对Redis的影响三、网络对Redis的影响四、Swap对Redis的影响 一、CPU对Redis的影响 二、磁盘对Redis的影响 性能建议: 如果是热点场景,建议大家关闭rdb和aof。在SATA和SAS普通盘上,append…

RocketMQ集群搭建,及RocketMQ-Dashboard部署(前RocketMQ-Console)

集群搭建 RocketMQ不支持单主机搭建主从结构集群,当从节点启动时,即使和主节点设置不同的监听端口,他也要去监听主节点端口,也就是说正常启动的从节点会监听四个端口。原因未知,现象后面会列举出来。 1. 准备JAVA环境…

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

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

超声波模块

HCSR04超声波模块是一种常用的测距模块,它通过检测超声波发射后遇到障碍物所反射的回波,从而测量出与障碍物之间的距离。以下是对HCSR04超声波模块的详细讲解: 一、模块组成与工作原理 组成:HCSR04超声波模块主要由两个压电陶瓷超…

Python一些可能用的到的函数系列131 发送钉钉机器人消息

说明 来自顾同学的助攻 钉钉机器人可以用来发送一些重要的系统消息,例如磁盘将满等等。原本还可以有更强的功能,就是监听群里的消息,然后做出反应,不过这个好像要买企业版,贵的毫无意义。 钉钉发消息有几种模式&#…

Ubuntu18.04 下安装CUDA

安装步骤 1.查看是否安装了cuda # 法1 cat /usr/local/cuda/version.txt # 法2 nvcc --version 2.若没有安装,则查看是否有N卡驱动,若无N卡驱动,则到软件与更新 -> 附加驱动中安装驱动 3.查看N卡驱动支持的cuda版本 nvidia-smi 如下…

VS+C++VTK-VCG三维网格模型鼠标框选拉普拉斯局部平滑

程序示例精选 VSCVTK-VCG三维网格模型鼠标框选拉普拉斯局部平滑 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《VSCVTK-VCG三维网格模型鼠标框选拉普拉斯局部平滑》编写代码,代…

扑捉一只耿鬼(HTML文件)

图例&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>耿鬼</title><style>body {background: #fff;font-family: Comfortaa, sans-serif;}* {box-sizing:…

【Kubernetes】持久卷的动态供给 Dynamic Provisioning

《持久化存储》系列&#xff0c;共包含以下文章&#xff1a; K8s 持久化存储方式持久卷 PV持久卷声明 PVC持久卷的动态供给 Dynamic Provisioning &#x1f60a; 如果您觉得这篇文章有用 ✔️ 的话&#xff0c;请给博主一个一键三连 &#x1f680;&#x1f680;&#x1f680; …

C++实现文件加解密及OllyDbg逆向

一.PE病毒和WannaCry勒索蠕虫 1.PE病毒 什么是PE病毒&#xff1f; PE病毒是以Windows PE程序为载体&#xff0c;能寄生于PE文件或Windows系统的病毒程序。PE病毒数量非常之多&#xff0c;包括早起的CIH病毒&#xff0c;全球第一个可以破坏计算机硬件的病毒&#xff0c;它会破…

Linux和Unix的区别及为什么鸿蒙系统不用Unix的原因

目录 Linux是什么? Unix是什么&#xff1f; 他们的区别&#xff1a; 鸿蒙系统介绍及鸿蒙系统不用Unix的原因 Linux是什么? Linux的历史可以追溯到1991年&#xff0c;由芬兰的计算机科学家林纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;为了学习操作系统的工作原理而…

计算机毕设选题推荐-基于python的豆瓣电子图书数据可视化分析

&#x1f496;&#x1f525;作者主页&#xff1a;毕设木哥 精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; 实战项目 文章目录 实战项目 一、基于python的豆瓣电子图书数…