教你学git

news2025/2/26 15:02:52

前言

git是一种用于多人合作写项目。详细说明如下

文章目录

  • 前言
    • 什么是版本控制?
    • 什么是 Git?
      • 它就属于人工版本控制器
      • 版本控制工具
      • 常见版本控制工具
    • 怎么工作的?
      • git 文件生命周期
      • 状态
      • 区域
    • 安装
    • 配置
      • -- global
      • 检查配置
    • 创建仓库
    • 工作流与基本操作
    • 查看工作区的文件状态
      • 如果显示乱码的解决方式
        • 显示乱码
        • 终端乱码
    • 添加工作区文件到暂存区
      • 创建版本
        • 提交备注
        • 修改默认编辑器
        • 单行备注
    • 查看提交日志
    • 修复提交
    • 删除
      • 撤销重置
        • 从暂存区中撤销到工作区
        • 该命令既可以用于回退版本
    • 比较
    • 分支
      • 查看分支
      • 创建分支
      • 切换分支
      • 分支合并
      • 删除分支
    • 合并记录
        • ~ 与 ^
        • rebase 操作
    • 合并冲突
    • 标签
      • 新建 tag
      • 查看 tag
    • 协同开发
      • github
    • SSH
        • 生成 SSH 秘钥
        • 添加代理
        • 添加 私钥
        • 在 github 上添加公钥
        • 测试
      • git 远程
        • 链接
        • 查看远程提交
        • 提交(同步)远程
        • 远程分支
        • 删除分支
    • 扩展:工作流 - git work flow
    • GUI 工具

首先要了解一下什么是版本控制

什么是版本控制?

版本控制是指对软件开发过程中各种程序代码、说明文档等文件的变更进行管理,它将追踪文件变化,记录文件的变更时间、变更内容、甚至变更执行人进行记录,同时对每一个阶段性变更(不仅仅只是一个文件的变化)添加版本编号,方便将来进行查阅特定阶段的变更信息,甚至是回滚

什么是 Git?

它就属于人工版本控制器

通过人工的复制行为来保存项目的不同阶段的内容,添加适当的一些描述文字加以区分

  • 繁琐、容易出错
  • 产生大量重复(冗余)数据

版本控制工具

通过程序完成上述人工版本控制行为

  • 方便且功能强大
  • 只记录不同版本之间变化的部分

常见版本控制工具

  • CVS
  • SVN
  • Git
  • ……

怎么工作的?

首先,我们得先了解两个重要概念

  • 状态
  • 区域

git 文件生命周期

在这里插入图片描述

状态

同时,git 又提供了三种(也可以说是四种)不同的记录状态

  • 已修改(modified)
  • 已暂存(staged)
  • 已提交(committed)

有一个特殊的状态

  • 未追踪(Untracked)

区域

git 提供了三个不同的工作区,用来存放不同的内容

  • 工作目录
  • 暂存区域
  • Git 仓库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bkFxl9BU-1676979124415)(.\assets\areas.png)]

安装

https://git-scm.com/

配置

当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址。 这样做很重要,因为每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改

git config user.name "你的姓名"
git config user.email "你的邮箱"

– global

通过 --global 选项可以设置全局配置信息

git config --global user.name "你的姓名"
git config --global user.email "你的邮箱"

检查配置

# 打印所有config
git config --list
# 打印指定config
git config user.name

创建仓库

进入希望纳入 git 版本控制的项目目录,使用 git init 初始化

git init

该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这个目录也是上面我们说的三个区域之一,这个目录也是 Git 保存数据记录的地方,非常重要,如非必要,不要轻易改动

工作流与基本操作

当一个项目被 Git 初始化以后,只是表示我们希望通过 Git 来管理当前的这个项目文件的不同时期版本记录,但是这个时候项目中已存在的文件,或者以后新增的文件都是没有进入版本控制管理的,它们是 未追踪(Untracked) 的状态

查看工作区的文件状态

git status

如果显示乱码的解决方式

显示乱码

git config --global core.quotepath false

终端乱码

菜单 -> 设置 -> 文本 -> 本地 / 编码

或修改配置文件

进入windoes的cmd 然后分别输入以下五行
git config --global core.quotepath false
git config --global gui.encoding utf-8
git config --global i18n.commit.encoding utf-8
git config --global i18n.logoutputencoding utf-8
set LESSCHARSET=utf-8

输入完成之后再执行命令

添加工作区文件到暂存区

git add

git add 1.txt
# 添加多个文件
git add 2.txt 3.txt
# 添加整个目录
git add ./a
# 添加多个目录
git add ./b ./c
# 添加所有文件
git add .

创建版本

git commit

将暂存区里的改动给提交到本地 git 仓库,也就是为这次工作(一般会把某个具有特定意义的工作作为一个版本,它可以是多个文件的变化)

  • 每次提交同时会生成一个 40 位的哈希值,作为该次提交版本的唯一 id

提交备注

每次提交都需要填写备注信息

git commit
# 会调用默认(或自定义)的文本编辑器

修改默认编辑器

git config core.editor notepad

# 添加 vscode 编辑器 - mac
# 通过 vim 打开环境变量配置文件
vim ~/.bash_profile
# 添加环境变量
export PATH=/Applications/Visual\ Studio\ Code.app/Contents/Resources/app/bin:$PATH
# 保存退出
source ~/.bash_profile
# 测试:在终端中直接通过命令 code 调用 vscode
git config --global core.editor "code --wait"

单行备注

git commit -m 备注信息

查看提交日志

git log

// 完整格式
git log
// 简要格式(单行)
git log --oneline

修复提交

git commit --amend

修复(替换上一次)提交,在不增加一个新的提交版本的情况下将新修改的代码追加到前一次的提交中

git commit --amend -m 提交

删除

git rm

# 从 git 仓库与工作区中删除指定文件
git rm 文件

# 只删除 git 仓库中的文件
git rm --cached 文件

# rm 以后,需要 commit 这次操作,否则 rm 将保留在暂存区
git commit -m 修正

撤销重置

git reset

从暂存区中撤销到工作区

// 从暂存区中撤销一个指定文件
git reset HEAD 文件名称
// 从暂存区中国年撤销所有文件
git reset HEAD .

该命令既可以用于回退版本

# 回退到指定的 commitID 版本
git reset --hard commitID

比较

# 比较 工作区和暂存区
git diff 文件 
# 比较 暂存区和仓库
git diff --cached [commitId] 文件
# 比较 工作区和仓库
git diff commitId filename
# 比较 仓库不同版本
git diff commitId1 commitId2

分支

我们的开发就像是游戏的任务,默认是在主线(master)上进行开发的。许多时候,还有各种支线任务,git 支持我们创建分支来进行项目开发

查看分支

git branch

创建分支

git branch 分支名称

切换分支

git checkout 分支名称
# 也可以使用 checkout -b 来新建分支
git checkout -b 分支名称

分支合并

# B 合并到 A,需要切换到 A 分支
git merge 被合并分支

# 查看已经合并的分支
git branch --merged
# 查看未合并的分支
git branch --no-merged

删除分支

# 如果分支为未合并状态,则不允许删除
git branch -d 分支名称
# 强制删除
git branch -D 分支名称

合并记录

rebase

# 合并 HEAD 前两个祖先记录
git rebase -i HEAD~2

~ 与 ^

~ : 纵向

^ : 横向

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3d94WqTi-1676979124417)(assets/path.png)]

rebase 操作

# p, pick = use commit => 使用
# r, reword = use commit, but edit the commit message => 使用,但重新编辑说明
# e, edit = use commit, but stop for amending => 使用
# s, squash = use commit, but meld into previous commit => 使用,但合并上一次
# f, fixup = like "squash", but discard this commit's log message => 就像 squash 那样,但会抛弃这个 Commit 的 Commit message
# x, exec = run command (the rest of the line) using shell => 执行脚本
# d, drop = remove commit => 移除
git rebase -i HEAD~3
# 弹出编辑器,根据需要的进行修改,然后保存
# 如果为 r,s 则会再次弹出编辑器,修改新的 commit message,修改之后保存

如果出现一些问题,可以通过 git rebase --edit-todogit rebase --continue 进行重新编辑保存

合并冲突

有的时候,不同的分支可能会对同一个文件内容和位置上进行操作,这样在合并的过程中就会产生冲突

  • 查看冲突文件
  • 修复冲突内容
  • 提交

标签

有的时候,我们希望给某一个特定的历史提交打上一些标签

新建 tag

git tag -a v1.0.0 HEAD/commitId

查看 tag

git tag

协同开发

以上所有的操作都是建立在本地的,如果我们希望进行团队协同开发,那么这个时候,我们就需要把 git 仓库信息与团队中的所有人进行共享

  • 分布式 - 中心化与去中心化

github

首先注册一个账号

使用 ssh 链接

SSH

https://help.github.com/cn/articles/connecting-to-github-with-ssh

https://help.github.com/cn/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent

生成 SSH 秘钥

ssh-keygen -t rsa -C "zmouse@miaov.com"

添加代理

使用 ssh-add 代理,如果没有启动,可以手动启动

eval $(ssh-agent -s)

添加 私钥

ssh-add 私钥路径

在 github 上添加公钥

个人中心 -> 设置 -> ssh -> 添加

测试

ssh -T git@github.com

git 远程

链接

git remote add origin git@github.com:miaov-zmouse/kkb-test.git






查看远程提交

git remote -v

提交(同步)远程

同步本地仓库到远程

git push origin -u master
# -u 简化后续操作
git push origin master

远程分支

# 提交到远程(分支)
git push origin [本地分支名称]:[远程分支名称]

# 远程先创建好分支然后拉取到本地
git checkout -b [本地分支名称] origin/[远程分支名称]

# 拉取远程分支到本地
git pull origin [远程分支名称]:[本地分支名称]

# 查看远程仓库
git remote show origin

# 查看本地分支
git branch

# 查看远程分支
git branch -r

# 查看所有分支
git branch -a

# 删除本地分支
git branch -d [本地分支名称]

# 删除远程分支
git push origin --delete [远程分支名称]
# or
git push origin :[远程分支名称]

# 设置默认提交分支
git branch --set-upstream-to=origin/[远程分支名称] [本地分支名称]

删除分支

git remote remove origin

扩展:工作流 - git work flow

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tqWGKVF3-1676979124418)(assets/gitflow.png)]

GUI 工具

https://git-scm.com/download/gui/win

  • Sourcetree
  • other editor

总结 :
总结来说 git 分为俩种方式 一种是cmd 输入指令就行,还有一种就是在编译器里面下载插件 《Git History》 使用图形化工具。
git 完全可以自学。

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

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

相关文章

高精密数字源表的发展史

在半导体、汽车、医疗等高端制造行业,源表通常被用于半导体材料或精密器件的电性能特性测试和生产测试应用,以及中低电平测试和实验室研究使用。源表采用四象限工作模式,可以在提供精密电压、电流源的同时,又能够作为电压、电流、…

浅谈Java线程池中的ThreadPoolExecutor工具类

目录 ThreadPoolExecutor的构造函数 关于线程池的一些补充 线程池运行原理分析 概念原理解释 整个流程图如下: 一点补充 创建线程池主要有两种方式: 通过Executor工厂类创建,创建方式比较简单,但是定制能力有限通过ThreadPoo…

Git ---- 概述

Git ---- 概述1. 何为版本控制2. 为什么需要版本控制3. 版本控制的工具集中式版本控制工具分布式版本控制工具4. Git 简史5. Git 工作机制6. Git 和代码托管中心Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。 Git 易于学…

深入浅出C++ ——继承

文章目录一、继承的相关概念1. 继承的概念2. 继承格式3. 继承方式4. 访问限定符5. 继承基类成员访问方式的变化二、基类和派生类对象赋值转换三、继承中的作用域四、派生类的默认成员函数五、继承与友元六、继承与静态成员七、菱形继承及菱形虚拟继承1. 单继承2. 多继承3. 菱形…

【比赛合集】9场可报名的「创新应用」、「程序设计」大奖赛,任君挑选!

CompHub 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…)比赛。本账号同时会推送最新的比赛消息,欢迎关注!更多比赛信息见 CompHub主页 或 点击文末阅读原文以下信息仅供参考,以比赛官网为准目录创新应用赛&…

基于Java+SpringBoot+Vue+Uniapp前后端分离健身预约系统设计与实现

博主介绍:✌全网粉丝3W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战✌ 博主作品:《微服务实战》专栏是本人的实战经验总结,《Spring家族及…

linux集群技术(二)--keepalived(高可用集群)(一)

高可用集群简介keepalived简介 1.高可用集群简介 1.1什么是高可用集群 高可用集群(High Availability Cluster,简称HA Cluster),是指以减少服务中断时间为目的的服务器集群技术。它通过保护用户的业务程序对外不间断提供的服务&am…

Vue3后台管理系统(一)基础环境

目录 一、初始化 二、整合Element-Plus 三、路径别名 四、多环境配置 五、反向代理 六、其他依赖 一、初始化 npm init vitelatest vue3-element-admin --template vue-ts 二、整合Element-Plus 1.本地安装Element Plus和图标组件 npm install element-plus npm inst…

code-breaking之javacon

JAVACON 题目 此题 来自P神 的code-breaking中的一道Java题,名为javacon,题目知识点为SpEL注入 题目下载地址:https://www.leavesongs.com/media/attachment/2018/11/23/challenge-0.0.1-SNAPSHOT.jar 运行环境 java -jar challenge-0.…

实用指南:如何在Anolis OS上轻松使用 Kata 安全容器?

文/云原生SIG本篇文章我们将详细介绍怎么轻松在 Anolis OS 上使用 Kata Containers 安全容器,我们将介绍 Kata Container 社区于 2022 年 10 月 10 日最新发行的 Kata3.0.0 的安装部署方式,3.0.0 版本包含了基于袋鼠 RunD 开源的最新 Rust Kata runtime …

AAAI 2023 | 小鹏汽车纽约石溪:在末层激活上作对抗训练的域自适应

原文链接:https://www.techbeat.net/article-info?id4602 作者:吕骋 增强未标记目标域数据的模型预测置信度是无监督域自适应(UDA) 的一个重要目标。在本文中,作者探讨了末层激活(即最后一层线性分类层输入…

以假乱真的手写模拟器?

前些时候给大家推荐了一款word插件叫做“不坑盒子”,这款盒子不仅方便了word的操作,还附带了手写模拟器这样的效果只是在使用的时候不仅需要手动下载字体,而且效果也并不是太理想。 今天小编找到了一款软件--手写模拟器,不仅一键生…

木鱼cms系统审计小结

MuYuCMS基于Thinkphp开发的一套轻量级开源内容管理系统,专注为公司企业、个人站长提供快速建站提供解决方案。 ​​ ‍ 环境搭建 我们利用 phpstudy 来搭建环境,选择 Apache2.4.39 MySQL5.7.26 php5.6.9 ,同时利用 PhpStorm 来实现对项目的调试 ​…

求数组中的第k小元素

文章目录第k小的元素🔒题目💡分析🔑题解🍃不去重版🍃去重版第k小的元素 🔒题目 题目来源:3533. 查找第K小数 - AcWing题库 💡分析 不去重版思路:去重版思路&#xff1a…

华为OD机试 - 斗地主(C++) | 附带编码思路 【2023】

刷算法题之前必看 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:https://blog.csdn.net/hihell/category_12199283.html 华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730 华为OD机试题…

一、【cas搭建单点登录】使用cas搭建单点登录服务器

使用cas搭建单点登录服务器 环境要求 JDK 8CAS 5.2tomcat 8 选用5.x的cas版本是应为要是jdk1.8的版本。 cas版本jdk版本5.x86.x117.x17 模板下载 目前cas的官方文档中,cas官方模板分成了5个大类。cas-sso-server 模板下载地址。 在cas的官方模板库中&#xff…

2023年2月22日PMP®项目管理认证课程正式开课

PMP认证是Project Management Institute在全球范围内推出的针对评价个人项目管理知识能力的资格认证体系。国内众多企业已把PMP认证定为项目经理人必须取得的重要资质。 PMP认证是Project Management Institute在全球范围内推出的针对评价个人项目管理知识能力的资格认证体系。…

微服务之Eureka

🏠个人主页:阿杰的博客 💪个人简介:大家好,我是阿杰,一个正在努力让自己变得更好的男人👨 目前状况🎉:24届毕业生,奋斗在找实习的路上🌟 &#x1…

【虚拟机】VirtualBox Host-Only + 主机网络共享配置

文章目录创建Host-Only虚拟机配置主机配置其它工作中经常会使用到虚拟机进行各种技术的试验,之前为了省事常用桥接模式,可是我经常变换办公地点,每个办公地点的局域网网段并不一样,所以我采取了仅主机模式网络共享这种方式&#x…

34-Golang中的结构体!!!

Golang中的结构体结构体和结构体变量(实例)的区别和联系结构体变量(实例)在内存中的布局如何声明结构体字段/属性注意事项和细节说明创建结构体实例的四种方式结构体使用细节结构体和结构体变量(实例)的区别和联系 1.结构体是自定义的数据类型,代表一类事物2.结构体…