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-devapt-get install gitgit --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/分支名

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

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

相关文章

Gavin Wood 访谈|Polkadot 从何而来,又将如何面对 AI 时代?

如果没有宏观经济&#xff0c;加密世界可能无法存在。或许&#xff0c;Satoshi Nakamoto 也永远不会写出那篇开创性的白皮书。区块链技术作为指数时代的核心之一&#xff0c;在宏观经济理论中占有重要地位。传统的经济增长公式是人口增长加生产率增长加债务增长。然而&#xff…

Python导出Jira列表

import requests import urllib3 urllib3.disable_warnings() from jira import JIRA import pandas as pd def login_jira(username,password):jira JIRA("https://jira.cn/",basic_auth(username,password))#projectsjira.project(id13)# jqlproject"云链-…

3D轻量化的三大应用解决方案

老子云平台https://www.laozicloud.com/ 为不同应用场景提供了三大解决方案。 01 单模型轻量化解决方案 数字化时代&#xff0c;越来越多的C2M定制、文旅、电商等行业&#xff0c;为了开拓市场&#xff0c;提升企业竞争力&#xff0c;开始把目光投向产品的3D展示交互。 单模…

CSS 空间转换 动画

目录 1. 空间转换1.1 视距 - perspective1.2 空间转换 - 旋转1.3 立体呈现 - transform-style1.4 空间转换 - 缩放 2. 动画 - animation2.1 动画的基本用法2.1 animation 复合属性2.2 animation 拆分属性2.3 多组动画 正文开始 1. 空间转换 空间&#xff1a;是从坐标轴角度定义…

基于编译型语言鲲鹏应用开发小技巧

编译型语言应用执行过程 大部分应用可以通过重新编译即可移植到鲲鹏平台 预处理命令: gcc -E hello.c -o hello.i&#xff0c;预处理完成后使用命令: cat hello.i可以看到预处理后的代码 编译命令: gcc -s hello.i -o hello.s 汇编命令: gcc -c hello.c -o hello.o 链接处理…

pytorch学习笔记2

首先如果遇到conda找不到包&#xff0c;pip老是超时的情况建议添加一下镜像源 conda的 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ cond…

【ETAS CP AUTOSAR基础软件】EcuM模块详解

文章包含了AUTOSAR基础软件&#xff08;BSW&#xff09;中EcuM模块相关的内容详解。本文从AUTOSAR规范解析&#xff0c;ISOLAR-AB配置以及模块相关代码分析三个维度来帮读者清晰的认识和了解EcuM。文中涉及的SOLAR-AB配置以及模块相关代码都是依托于ETAS提供的工具链来配置与生…

Java集合【超详细】

文章目录 一、集合框架1.1 概述1.2 数组和集合的区别1.3 Java集合框架体系1.4 数据结构1.4.1 栈、队列、数组、队列1.4.2 二叉树【理解】1.4.3 二叉查找树【理解】1.4.4 平衡二叉树【理解】1.4.5 红黑树【理解】 1.5 泛型 二、Collection集合2.1 Collection 集合概述和使用【应…

如何利用智能算法降低成本,扩大收益?

算法交易&#xff08;Algorithm Trading&#xff09;是一种投资策略&#xff0c;它使用计算机算法来分析市场数据&#xff0c;制定交易决策&#xff0c;并自动执行交易。算法交易的主要目标是利用市场价格波动来获取利润&#xff0c;同时降低人为干预的风险和成本。 量化交易中…

【漏洞复现】WordPress Country State City Dropdown CF7插件 SQL注入漏洞(CVE-2024-3495)

0x01 产品简介 Country State City Dropdown CF7插件是一个功能强大、易于使用的 WordPress 插件&#xff0c;它为用户在联系表单中提供国家.州/省和城市的三级下拉菜单功能&#xff0c;帮助用户更准确地填写地区信息。同时&#xff0c;插件的团队和支持也非常出色&#xff0c…

MySQL 索引的使用

本篇主要介绍MySQL中索引使用的相关内容。 目录 一、最左前缀法则 二、索引失效的场景 索引列运算 字符串无引号 模糊查询 or连接条件 数据分布 一、最左前缀法则 当我们在使用多个字段构成的索引时&#xff08;联合索引&#xff09;&#xff0c;需要考虑最左前缀法则…

COMSOL中液晶材料光学特性模拟

前面我们根据FDTD官方文档设置了液晶指向的模型。COMSOL也可以根据相似的方法设置各项异性的周期性变化的材料。 该方法参考了luneburg_lens的COMSOL文档 在给出的文件中&#xff0c;可以发现定义-变量中可以使用默认坐标作为变量&#xff0c;即xyz。因此&#xff0c;折射率也可…

德人合科技——天锐绿盾内网安全管理软件 | -文档透明加密模块

天锐绿盾文档加密功能能够为各种模式的电子文档提供高强度加密保护&#xff0c;丰富的权限控制以及灵活的应用管理&#xff0c;帮助企业构建更严密的立体保密体系。 PC地址&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee ————…

【算法】MT2 棋子翻转

✨题目链接&#xff1a; MT2 棋子翻转 ✨题目描述 在 4x4 的棋盘上摆满了黑白棋子&#xff0c;黑白两色棋子的位置和数目随机&#xff0c;其中0代表白色&#xff0c;1代表黑色&#xff1b;左上角坐标为 (1,1) &#xff0c;右下角坐标为 (4,4) 。 现在依次有一些翻转操作&#…

【并发程序设计】12.内存映射

12.内存映射 使一个磁盘文件与内存中的一个缓冲区相映射&#xff0c;进程可以像访问普通内存一样对文件进行访问&#xff0c;不必再调用read,write&#xff0c;更加高效。 用到的函数 mmap函数 原型&#xff1a; #include <sys/mman.h> void* mmap(void* start, size_…

py黑帽子学习笔记_web攻击

python网络库 py2的urllib2 py3好像把urllib2继承到了标准库urllib&#xff0c;直接用urllib就行&#xff0c;urllib2在urllib里都有对应的接口 py3的urllib get请求 post请求&#xff0c;和get不同的是&#xff0c;先把post请求数据和请求封装到request对象&#xff0c;再…

亚马逊云科技专家分享 | OPENAIGC开发者大赛能量加油站6月5日场预约开启~

由联想拯救者、AIGC开放社区、英特尔联合主办的“AI生成未来第二届拯救者杯OPENAIGC开发者大赛”自上线以来&#xff0c;吸引了广大开发者的热情参与。 为了向技术开发者、业务人员、高校学生、以及个体创业人员等参赛者们提供更充分的帮助与支持&#xff0c;AIGC开放社区特别…

lua 计算第几周

需求 计算当前赛季的开始和结束日期&#xff0c;2024年1月1日周一是第1周的开始&#xff0c;每两周是一个赛季。 lua代码 没有处理时区问题 local const 24 * 60 * 60 --一整天的时间戳 local server_time 1716595200--todo:修改服务器时间 local date os.date("*t…

解析前端开发中同源策略与配置代理

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 在前端开发中&#xff0c;跨域请求是一个常见的问题。同源策略限制了浏览器中一个页面…

2024中青杯数学建模竞赛A题人工智能视域下养老辅助系统的构建思路代码论文分析

2024中青杯数学建模A题论文和代码已完成&#xff0c;代码为A题全部问题的代码&#xff0c;论文包括摘要、问题重述、问题分析、模型假设、符号说明、模型的建立和求解&#xff08;问题1模型的建立和求解、问题2模型的建立和求解、问题3模型的建立和求解&#xff09;、模型的评价…