Git使用教程 gittutorial
该教程对该文章的翻译:https://git-scm.com/docs/gittutorial
本文介绍怎用使用 Git 导入新的工程、修改文件及如何其他人同步开发。
首先, 可以使用以下指令获取文档帮助
git help log
笔者注:不建议看这个文档,标准的语法介绍格式,很不友好
可以使用指令
git log --graph
查看提交过程
笔者注:不过也不建议使用,虽然优点GUI感觉,但毕竟是命令行输出。建议安装个GitKraken,才是真的方便。
在开始任何开发之前,建议线配置用户名和邮箱,例如
git config --global user.name "Your Name"
git config --global user.email "you@yourdomain.example.com"
笔者注:这个配置是全局有效的,就是整台电脑都有效,配置保存在 ~/.gitconfig 文件里。上面的名字和邮箱就是注册Github/Gitee/Gitlab 的用户名和邮箱。
导入新的工程
先只考虑在本地进行开发,想要在代码开发过程中进行版本管理。有一个压缩文件 project.tar.gz
,解压并且进行Git初始化
tar xzf project.tar.gz
cd project
git init
Git将会输出
Initialized empty Git repository in .git/
通过初始化,会产生一个文件夹 .git
,git相关的东西会存在里面。
接下来,可以将当前路径下的所有文件(用 .
表示)进行暂存(原文用 take a snapshot,翻译成快照太别扭了)。
git add .
这个暂存操作会将文件暂时放在一个叫做索引表(Index)的地方。如果想要长久保存,那么就执行
git commit
笔者注:这个命令会打开编辑器,写入自己的Comit,实际上直接用
git commit -m "commit 内容"
更方便。
暂存(仅add)和提交(commit)的区别是什么呢?可以这样理解,比如写错了,要返回之前写的内容,要么返回到原始内容,要么返回add完毕的结果。但是如果commit了,可以直接跳到每一次commit的时候。
修改文件
如果修改了一些文件,就把它们加入到索引表中,
git add file1 file2 file3
add完毕,准备提交,可以使用 git diff --cached
来查看当前已add的东西与上一次commit后的差异
git diff --cached
如果不加参数 --cached
,那么就是查看当前未add的东西与上一次commit后的差异了。git status
指令也可以查看当前的修改
git diff
git status
git add
的逆操作是git restore
注:增删改 都是修改。
对于很多IDE,例如VScode,修改了的地方也会有标注,可以跟上述指令输出对比加深理解。
如果确定要提交,那么继续执行 git commit
即可。
也可以把 add 和 commit 合并成一条指令
git commit -a
不过一般都分开来。
查看提交历史
任何时候都可以使用以下指令查看修改
git log
如果想要很详细地比较每一步提交的差异,使用指令
git log -p
但是通常就是简单看以下每一步的修改,常用指令
git log --stat --summary
分支管理
一个Git仓库能够维护很多个分支,创建一个新的分支,例如 experimental
,使用
git branch experimental
查看分支使用指令
git branch
就可以输出所有分支,例如
experimental
* master
experimental
是刚才创建的,而 master
是默认的分支。
在
master
上创建experimental
,两者是一致的,相当于只是别名,改一个另一个也跟着修改,直到commit后才会各走各的。
切换到experimental
分支使用
git switch experiment
现在修改一下文件,并且add和commit
git commit -a
现在如果执行指令 git switch master
切换到分支 master
,就看不到自己的修改,因为修改是在 experimental
上进行的。如果切换到 experimental
,又会重新看到修改。
在 master
分支上修改文件内容,并且commit(默认已经add),那么从此两个分支就是完全不一样的了,会产生分歧(diverge)。此时,就需要合并(merge)代码,将所有修改合并在一起。
例如,将 experimental
合并到 master
,由于当前已经在 master
分支上,因此使用以下指令进行合并
git merge experimental
如果修改没有冲突(conflict),那么会自动完成合并。但是如果有冲突,就需要决策选择哪个分支的内容了。
没有冲突例如在
master
中将变量 a 从0改为1,在experiment
分支中将变量 b 从 0 改为2,那么合并后 a 为1,b为2。
有冲突例如master
中将变量 a 从0改为1,在experiment
分支中将变量 a 从 0 改为2,那么两个分支修改不一致。
可以使用
git diff
查看冲突。然后在IDE(例如VScode)中选择要保留的内容解决冲突问题。例如:
如果要取消合并,使用
git merge --abort
,在commit前可以取消,commit后就直接回退版本吧。
现在 experimental
的内容已经合并过来了,可以删除该分支了。删除分支使用指令
git branch -d experimental
有时要强制删除一些分支,可以是使用指令
git branch -D experimental
使用Git合作开发
假设小明新建一个Git仓库 home/ming/project
,小华也在根目录下克隆该仓库
hua$ git clone /home/hua/project myrepo
新仓库 myprepo
是对小明创建的仓库的复制版本。现在小华开始修改文件,并且提交。当小华完成自己所有开发时,就需要传给小明进行合并,小明的操作如下
ming$ cd /home/ming/project
ming$ git pull /home/hua/myrepo master
这实现将小华的代码合并到小明的 master
分支上。如果小明自己也做了修改,有冲突的话小明就得手动解决了。
pull
的功能有两个,一是从远程拉取(fetch)修改,二是与当前分支进行合并(merge)。
提交历史查看
相关文章:

Git使用教程 gittutorial
该教程对该文章的翻译:https://git-scm.com/docs/gittutorial 本文介绍怎用使用 Git 导入新的工程、修改文件及如何其他人同步开发。 首先, 可以使用以下指令获取文档帮助 git help log笔者注:不建议看这个文档,标准的语法介绍…...

有了向量数据库,我们还需 SQL 数据库吗?
“除了向量数据库外,我是否还需要一个普通的 SQL 数据库?” 这是我们经常被问到的一个问题。如果除了向量数据以外,用户还有其他标量数据信息,那么其业务可能需要在进行语义相似性搜索前先根据某种条件过滤数据,例如&a…...

信息网络协议基础-IPv6协议
文章目录 概述为什么引入IP服务模型IPv4的可扩展性问题解决方法***CIDR(Classless Inter-Domain Routing, 无类别域间寻路)前缀汇聚***前缀最长匹配***NAT(网络地址转换)存在的问题解决方案路由表配置***局限性IPv6协议头标IPv6地址表示前缀类型单播地址链路局部地址(Link-Loca…...

VC++ ado 实现单表CURD
继续修改前文的资产管理源码; 新建一个数据库sds;把代码中的数据库连接改为连接此库; 新建下图一个表; 把之前的资产类别管理对话框改为下图所示;对话框ID也改为下图; 资产类别管理菜单和ID改为下图; 直接修改资产类别管理对话框类不太方便,新建一个对话框类,没有关联…...

C#使用switch多路选择语句判断何为季节
目录 一、 switch语句 二、示例 三、生成 一、 switch语句 switch语句是多路选择语句,它通过一个表达式的值来使程序从多个分支中选取一个用于执行的分支。 switch表达式的值只可以是整型、字符串、枚举和布尔类型。 switch语句中多个case可以使用一个break。 在…...

可爱的魔法曲线 Lovely Magical Curves(12年开始只有5个人AC)
一起来交流编程吧!【CSDN app】:http://qm.qq.com/cgi-bin/qm/qr?_wv1027&k3svdDJTlkD76TRRShbxYCYK1zK1c8cyF&authKeyv1pxp6rS8AA4SRy7bflJl9LIwp8d5v0HOudw%2BDxHiWDRqZ1LzjeoBJH1Z1EXnl35&noverify0&group_code546881376 可爱的魔法…...

通过C++程序实现光驱的自动化刻录和读取
文章目录 ISO文件格式光盘的基本概念光盘种类特点DVDR光盘使用windows调用Linux调用Linux平台下用到的C库:读取设备驱动列表向光驱中写文件 数字存储媒体快速发展的今天,光驱的使用已经不像以前那样普及了。但是在数据备份、安装软件和操作系统、旧设备兼容等领域还…...

【电商项目实战】商品详情显示与Redis存储购物车信息
🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《电商项目实战》。🎯🎯 &am…...
概率论基础
1.概率论 1.1 随机事件与概率 1.1.1 基本概念 样本点(sample point): 称为试验 S S S的可能结果为样本点,用 ω \omega ω表示。 样本空间(sample space):称试验 S S S的样本点构成的集合为样本空间,用 Ω \Omega Ω表示…...
Mac电脑CMake安装和配置
1.从CMake官网下载dmg文件并且安装 ...
FormData传送复杂数据
FormData 是一个用于创建表单数据对象的 JavaScript 类。它通常用于通过 JavaScript 发送表单数据,尤其是用于发送 AJAX 请求时非常有用。 使用 FormData 可以方便地构建一个以 multipart/form-data 格式提交的表单数据,这允许你在发送 XMLHttpRequest …...

力扣回溯算法-电话号码的字母组合
力扣第17题,电话号码的字母组合 题目 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 .电话号码的字母组合 示例: 输入:“2…...
运维面试笔试题
目录 shell脚本 nginx 数据库mysql k8s(kubernetes) 安全与防护 网络TCP/IP shell脚本 1 通过正则表达式匹配文本...

Oracle database 静默安装 oracle12c 一键安装 12.1.0.2
基于oracle安装包中应答文件实现一键安装 注意此安装脚本基于12.1.0.2 安装包 原始安装包结构为两个压缩包 此脚本使用安装包为原始压缩包解压后、 重新封装为一个.zip压缩包 建议在linux 环境下解压重新压缩后 使用该脚本 支持环境: Linux :centerOS 7 oracle :12.1.0.…...

【Java EE初阶三 】线程的状态与安全(上)
1. join方法与多线程 1.1 初识多线程 为了提高cpu得利用率,因此就引入了多个线程的概念;即每个线程负责完成整个程序的一部分工作即可。 写一个代码,让主线程,创建一个新的线程,由新线程负责完成运算(12。…...
英飞凌TC3xx之一起认识GTM系列(五)如何实现GTM与DSADC关联的配置
英飞凌TC3xx之一起认识GTM系列(五)如何实现GTM与DSADC关联的配置 1 GTM与DSADC的连接1.1 EDSADC 到 GTM 的连接1.1.1 工作原理说明1.1.2 应用举例1.2 GTM 到 EDSADC 的连接1.2.1 工作原理说明1.2.2 应用举例2 总结编者按:笔者在从事这部分开发工作的时候,看着手册上的各种通…...

小兔鲜儿 uniapp - 购物车模块
目录 加入购物车 接口相关 购物车列表 静态结构 登录状态 列表渲染 删除购物车 接口相关 参考代码 修改商品信息 接口相关 修改商品数量 修改商品选中/全选 底部结算信息 计算总钱数(总金额) 带返回按钮的购物车 完成加入购物车…...
Python使用PyMySql增删改查Mysql数据库
PyMysql简介 PyMysql是Python中用于连接MySQL数据库的一个第三方库,它实现了MySQL客户端/服务器协议,使得Python程序能够与MySQL服务器进行交互。由于Python 2的mysql-python(又称mysqldb)模块在Python 3上支持不够完善࿰…...

前端实现websocket类封装
随着Web应用程序的发展,越来越多的人开始利用Websocket技术来构建实时应用程序。Websocket是一种在客户端和服务器之间建立持久连接的协议。这种协议可以在一个单独的连接上实现双向通信。与HTTP请求-响应模型不同,Websocket允许服务器自主地向客户端发送…...

鸿蒙开发中的一些小问题
这是我在学习鸿蒙开发中遇见的小问题 Q1:This custom component must have a build function. <etsLint>Q2:page_title is not translated into en_US(American English)Q3:Module "../CustomComponent/CustomButton" declar…...

linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...