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)。

提交历史查看

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

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

相关文章

FreeRTOS的学习

1.创建函数和删除 动态创建为FreeRTOS分配的堆栈(方便),而静态创建为人为分配空间。动态应用多任务中必须有while(1)否则只会执行一次任务中的延时要用 vTaskDelay(500); 延时期间执行其它任务 任务中的延时使…

postman进阶使用

前言 对于postman的基础其实很容易上手实现,也有很多教程。 对于小编我来说,也基本可以实现开发任务。 但是今年我们的高级测试,搞了一下postman,省去很多工作,让我感觉很有必要学一下 这篇文章是在 高级测试工程师ht…

01-Spring Security框架的认证和授权测试

Spring Security 介绍 认证功能与业务无关几乎是每个项目都要具备的功能,市面上有很多认证框架如Apache Shiro、CAS、Spring Security等 Spring Security是Spring家族的一份子且和Spring Cloud集成的很好,所以本项目采用Spring Security作为认证服务的技术框架 …

vue3(六)-基础入门之自定义组件与插槽、ref通信

一、全局组件 html: <div id"app"><mytemplace></mytemplace> </div>javascript: <script>const { createApp } Vueconst app createApp({})app.component(mytemplace, {template: <div><button>返回</button>…

canvas随机绘制100个五角星

canvas实例应用100 专栏提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。 canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重要的帮助。 文章目录 示例…

element-plus修改主题颜色

一、自定义scss文件 在src\css\styles\element目录下新建index.scss 代码如下 forward "element-plus/theme-chalk/src/common/var.scss" with ($colors: ("primary": ("base": #d61b1a,"color": #fff,),) );use "element-plus…

Java - 工厂设计模式

Java - 工厂设计模式 一. 简介二. 例子2.1 定义抽象类2.2 定义子类2.3 创建工厂2.4 测试 三. JDK中使用工厂模式的案例 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 工厂设计模式…

Day73力扣打卡

打卡记录 统计移除递增子数组的数目 II&#xff08;双指针&#xff09; 链接 class Solution:def incremovableSubarrayCount(self, a: List[int]) -> int:n len(a)i 0while i < n - 1 and a[i] < a[i 1]:i 1if i n - 1: # 每个非空子数组都可以移除return n …

普中STM32-PZ6806L开发板(STM32CubeMX创建项目并点亮LED灯)

简介 搭建一个用于驱动 STM32F103ZET6 GPIO点亮LED灯的任务;电路原理图 LED电路原理图 芯片引脚连接LED驱动引脚原理图 创建一个点亮LED灯的Keil 5项目 创建STM32CubeMX项目 New Project -> 单击 -> 芯片搜索STM32F103ZET6->双击创建 初始化时钟 调试设置 一…

双侧电源系统距离保护MATLAB仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 系统原始数据 双侧电源系统模型如图所示&#xff1a; 仿真模型搭建 将线路AB分成Line1和Line2&#xff0c;将线路BC分成Line3和Line4&#xff0c;用三相电压电流测量模块作为系统母线&#xff0c;根据系统已…

洛谷 P1387 最大正方形 刷题笔记

P1387 最大正方形 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 找出一个 由数字1组成的最大正方形 输出该正方形的边长 &#xff1b; 思路 dp 画图模拟 可以发现 当 当前点a[i][j]1,满足构成正方形的初步条件 而当前点能构成的最大正方形长度 由它的左上角 左边和上边…

新手为什么跟着大型机构交易?fpmarkets总结理由

正所谓方向不对努力白费&#xff0c;这也就是为什么fpmarkets建议新手在刚开始的时候&#xff0c;跟着大型机构进行交易。 这些大型机构包括中央银行、巨额对冲基金、投资和保险公司等等&#xff0c;首先fpmarkets认为这些大型机构的交易量巨大&#xff0c;能够影响市场的走势。…

LeetCode刷题--- N 皇后

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 http://t.csdnimg.cn/6AbpV 数据结构与算法 ​​​​​​http://t.csdnimg.cn/hKh2l 前言&#xff1a;这个专栏主要讲述递归…

ARCGIS PRO SDK 要素空间关系

一、要素与要素查询&#xff0c;返回的是bool值 1、 Touches 判断几何要素是否接触 Touches 如果 geometry1 与 geometry2 接触&#xff0c;则返回 true&#xff0c;否则 false。 touches GeometryEngine.Instance.Touches(Geometry1, Geometry2) 2、…

传感器原理与应用复习--电感式传感器

文章目录 上一篇自感式电感传感器差动变压器式传感器电涡流式传感器下一篇 上一篇 传感器原理与应用–传感器基本特性与应变式传感器 自感式电感传感器 将线圈通入电流产生磁场&#xff0c;而间隙的大小将影响磁场的大小&#xff0c;从而进行检测 变气隙式电感传感器&#xf…

2D transform 1-translate

移位&#xff1a;translate 缩放&#xff1a;scale 旋转&#xff1a;rotate 扭曲&#xff1a;skew <style>.outer {width: 200px;height: 200px;border: 2px solid black;margin-top: 100px;}.inner {width: 200px;height: 200px;background-color: pink;transform: t…

el-select多选修改默认显示一个

需求&#xff1a;超出选择框已数字展示 效果 备忘一下 代码 父组件 <template><div><div class"credit_box"><div class"credit_select_box"><div class"credit_select"><span>选择框1</span><…

C#中的Attribute详解(上)

C#中的Attribute详解&#xff08;上&#xff09; 一、Attribute是什么二、Attribute的作用三、Attribute与注释的区别四、系统Attribute范例1、如果不使用Attribute&#xff0c;为了区分这四类静态方法&#xff0c;我们只能通过注释来说明&#xff0c;但这样做会给系统带来很多…

前端文件在虚拟机,后端在本机,两个如何通信

前端文件在虚拟机&#xff0c;后端在本机&#xff0c;两个如何通信 如果前端的文件放在虚拟机里面&#xff0c;但是调用接口的后端在本地调试&#xff0c;如何做到在虚拟机中也能访问到本地的接口内容。 其实这个问题很简单&#xff0c;只要讲本地的IP和虚拟机中的IP结合就可…

unknown variable ‘authentication_policy=mysql_native_password‘

unknown variable authentication_policymysql_native_password 背景解决尝试一尝试二(解决) 总结 背景 mac上安装多个版本数据库。我是通过dmg安装的&#xff0c;先装的5.7&#xff0c;再装的5.8&#xff0c;然后5.8的能正常用&#xff0c;5.7的启动不起来。报错信息为如下 …