Git教程I

Git教程I

  • 本地Git
    • 创建git仓库
    • 将修改存到暂存区
    • 将暂存区提交到当前分支
    • 查看提交历史
    • 回退版本
    • 恢复到更晚的版本
    • 创建新分支
    • 切换分支
    • 简单的分支合并
    • 冲突分支合并
    • 不使用fast forward: --no-ff
  • 远程Git
    • 连接远程仓库
    • 将本地分支上传到远程仓库
    • 从远程仓库拉取

本地Git

学习如何使用本地Git。

创建git仓库

git init可以在当前位置创建一个git仓库。

也可以用git clone创建并克隆一个远程仓库。

将修改存到暂存区

假设你添加/修改/删除了文件a.cpp。可以用git status来看你的电脑在修改了哪些内容。untracked就是还没有存在暂存区的。

可以用git add a.cpp来将这个修改添加到暂存区。这之后再用git status就能看到已经存了。

将暂存区提交到当前分支

当前分支就是现在所在的分支。默认创建后是master或main。你总是在某一个分支上。

git commit -m 'NIHAO'来将暂存区内容提交到当前分支。

查看提交历史

多次进行“修改-add-commit”后,你就已经多次commit了。现在可以用git log来看每次commit。每次commit有commit、Author、Date等信息。"commit"后的十六进制数是这个commit的编号。一次commit也就是一个版本。

可以用git blame a.cpp查看一个文件的改变历史。

回退版本

git reset --hard 12345ab来回退到以12345ab开头的编号的commit版本。这会修改你的电脑里相应的文件。

commit编号至少填前四位。

恢复到更晚的版本

刚才我们学习了如何回到更早的版本。那么如何回到更晚的版本?

同样用git reset --hard …命令就可以了。

如果不知道版本commit编号,可以用git reflog查看commit对应的编号(在该行的开头)。

创建新分支

每次commit可以视为一个树上的节点,随着commit的进行,一根树枝在不断生长。我们也可以在一个节点创建一个新分支。这之后,我们可以切换到这个分支上,在这个分支上生长,同时其它分支没有改变。

git branch apple来创建一个名为apple的分支(这时还没有切换过去)。

切换分支

git checkout apple来切换到apple分支。同样,也可以git checkout master切换回来。

git branch查看现在有的所有分支,以及当前在哪个分支。

切换分支之后,电脑里的文件也会相应修改。

简单的分支合并

假设你在某个版本A切换到了新分支apple,并在这上面提交了一些版本。那么现在apple就领先master若干个版本。

如果想让master追上apple,可以先切换到master分支,然后git merge apple就行了。

如果想删除apple分支,可以用git branch -d apple

一定要注意的是,这种分支合并只用于merge到的分支是另一个的后代的情况,git会使用fast-forward模式。

如果你merge了一个更落后的分支(即祖先节点),那么什么也不会发生。

冲突分支合并

如果你merge了一个既有落后也有领先的分支(即既不是祖先也不是后代),那么就不能fast-forward合并。这时merge的话,会进入MERGING模式,你可以在命令行上面看到。

可以用git status总览合并与冲突的情况。有些文件是both modified,也就是说它在两个分支里做了不同的修改。

现在查看电脑里的both modified文件,其内容被改为了类似diff结果的格式。

事实上,这也相当于untracked modified文件。我们在把它修改成想要的内容后git add就可以commit了。commit之后,MERGING模式也结束了。

可以使用git mergetool来修改文件。这里介绍vimdiff的使用方法:聚焦于下方窗口,这个是最后保存的文件。用]c命令定位到不同之处。用:diffg l来采用本地的方案(在屏幕左上方窗口的),:diffg r采用远程方案(屏幕右上方窗口),:diffg b采用base方案(屏幕正上方的)。也可以自己修改调整。最后:wqa全部保存退出。

现在可以用git log --graph --pretty=oneline来看分支合并的示意图。

不使用fast forward: --no-ff

合并到后代时,如果想保持自己的分支和后代分支不在一个节点上,可以加上--no-ff参数。这会新建一个commit,可以用-m参数指定提示信息。这么做的效果看起来像自己先提交了一个没有修改的commit,然后冲突合并(且完全采用)后代。

远程Git

学习如何使用远程Git。

连接远程仓库

git remote命令可以显示远程仓库。如果是用git init创建的本地仓库,那么应该还没有连接,什么也不会显示。

git remote add grape git@github.com:myjs999/gittest.git来连接到一个存在的GitHub仓库。你也可以连接到别的仓库。grape是本地的一个远程仓库的代号,你也可以改成别的名字,比如origin。

将本地分支上传到远程仓库

假设本地有已经commit的分支。

git push grape来将当前分支上传到远程仓库。会在远程仓库自动创建同名分支。

如果远程仓库已经有这个分支,那么只要本地版本领先于远程版本,上传就能成功。

从远程仓库拉取

git pull grape apple可以将远程仓库的apple分支内容拉取到当前分支。这相当于做了一次merge。如果远程仓库领先于本地,那么拉取就能直接成功。否则可以参考冲突合并。

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

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

相关文章

代码随想录刷题笔记 DAY 25 | 组合问题 No.77 | 组合求和III No.216 | 电话号码的字母组合 No.17

文章目录 Day 2501. 组合问题(No. 77)2.1 题目2.2 笔记2.3 代码 02. 组合求和III(No. 216)2.1 题目2.2 笔记2.3 代码 03. 电话号码的字母组合(No. 17)3.1 题目3.2 笔记3.3 代码3.4 补充 Day 25 01. 组合问…

InstantBox:开箱即用的临时 Linux 环境

在云计算和虚拟化技术日益成熟的今天,我们有时需要一个快速、简单、临时的 Linux 环境来进行各种任务。这就是 InstantBox 的用武之地。 什么是 InstantBox? InstantBox 是一个开源项目,它可以快速启动临时的 Linux 系统,并提供…

微软Bing地图获取栅格瓦片或图块

bing地图获取栅格瓦片或图块 获取元数据 https://dev.virtualearth.net/REST/v1/Imagery/Metadata/{imagerySet}?key{BingMapsKey}imagerySet:要为其请求元数据的影像类型。官方说中国支持以下两个值:RoadOnDemand、VibrantDark BingMapsKey&#xff…

【生产实测有效】Linux磁盘清理常用命令

经常遇到磁盘空间告警需要清理 常用方法 磁盘空间分析 先查看整体磁盘空间使用情况 df -Th lsblk 再有针对性的查看使用率过高的磁盘 du -hsx --exclude/{proc,sys,dev,boot,home,tmp,usr,var,app,ncltybbpo} /*查找大文件 find . -type d -exec tar -cjvf {}.tar.bz2 {…

作业2024/2/12

分支、循环练习 1、选择题 1.1、以下程序的输出结果是____A____。 main() { int k11,k22,k33,x15; if(!k1) x--; else if(k2) if(k3) x4; else x3; printf(“x%d\n”,x); } A x4 B x15 C x14 D x3 1.2、有以下程序,while循环执行____A____次…

669. 修剪二叉搜索树

给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。…

【前沿技术杂谈:迁移学习】欧洲人工智能法案对人工智能开发者的意义 [2023 年 12 月更新]

【前沿技术杂谈:迁移学习】欧洲人工智能法案对人工智能开发者的意义 [2023 年 12 月更新] 定义、一般原则和禁止做法人工智能系统开发者基于风险的义务固定和通用人工智能开发人员(第 3/28 条)基础模型的提供者(第 28b…

C++笔记:类与对象的语法

文章目录 1 简单认识面向过程与面向对象1.1 面向过程1.2 面向对象 2 类的引入:struct -> class3 类的定义3.1 class 定义类的语法3.2 成员变量的命名建议 4 类的访问限定符4.1 class 和 struct 的区别4.2 C更喜欢用class定义类的原因 5 类的作用域5.1 声明定义合…

Cost S-curve

成本S曲线 Cost S-curve 每个月成本预算,柱形图 每个月成本累积(合计):成本S曲线,折线图,但是肯定都是上升的 echarts图表:

c++ STL系列——(五)map

在C中,标准模板库(STL)提供了许多容器和算法,其中之一便是map。map是一种关联式容器,它提供了一种将键值对(key-value pair)相关联的方式,使得可以通过键值快速地查找、插入或删除元…

java客运管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java客运管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&#…

洛谷C++简单题小练习day10—umi的函数

day10--umi的函数--2.13 习题概述 题目背景 umi 找到了一个神秘的函数 f。 题目描述 这个函数接受两个字符串 s1,s2。这些字符串只能由小写字母组成并且具有相同的长度。这个函数的输出是另一个长度与 s1,s2 相同的字符串 g。 g 的第 i 个字符等于 s1 的第 i 个字符和 s2…

Java实现中学生家校互联系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生管理模块2.2 课堂表现模块2.3 考试成绩模块2.4 家校留言模块2.5 校园通知模块 三、系统设计3.1 用例设计3.2 实体类设计3.2.1 课堂表现实体类设计3.2.2 考试成绩实体类设计3.2.3 家校留言实体类设计3.2.4 校园通知实…

现代化端口扫描工具RustScan

今天是大年初五,喜迎财神 ,祝大家✔️顺风顺水 ✔️诸事如意 ✔️财源滚滚 ✔️大吉大利 顺便提一下,老苏的博客启用了新域名: https://laosu.tech 什么是 RustScan ? RustScan 是一款现代化的端口扫描器。能快速找到端…

AutoGen实战应用(三):多代理协作的数据可视化

之前我完成了关于AutoGen的两篇博客,还没有读过这两篇博客的朋友可以先阅读以下,这样有助于对AutoGen的初步了解: AutoGen实战应用(一):代码生成、执行和调试_autogen 支持的model-CSDN博客 AutoGen实战应用(二):多代…

什么是系统工程(字幕)26

0 00:00:00,000 --> 00:00:02,490 那么下一个图就是 1 00:00:02,780 --> 00:00:05,530 图16.13这个图了 2 00:00:06,350 --> 00:00:08,120 那么这个图的话 3 00:00:09,370 --> 00:00:11,400 它是派生了一个 4 00:00:12,940 --> 00:00:15,450 排空残渣的需求…

Vue3.0(六):VueX 4.x详解

Vuex4状态管理 什么是状态管理 在开发中,我们的应用程序需要处理各种各样的数据,这些数据需要保存在应用程序的某一个位置,对于这些数据的管理,就是 状态管理目前前端项目越来越复杂,多组件共享同一数据的状态很常见…

【排序】归并排序

归并排序 动图演示: 基本思想:分治思想 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子…

小白学Halcon100例:如何应用极坐标的展开及逆变换?

这里写目录标题 什么是极坐标系?在halcon中对应的算子halcon实例程序输出结果:原图什么是极坐标系? 1、极坐标系(polar coordinates)是指在平面内由极点、极轴和极径组成的坐标系。在平面上取定一点O,称为极点。从O出发引一条射线Ox,称为极轴。再取定一个单位长度,通常…

“操作符大揭秘:一篇文章让你秒懂所有!”

目录 1. ⼆进制介绍 2. 原码、反码、补码 3. 移位操作符 4. 位操作符:&、|、^ 5. 逗号表达式 6. 下标访问[]、函数调⽤() 7. 操作符的属性:优先级、结合性 8. 整型提升 9. 算术转换 10. 表达式求值 正文开始: 1. ⼆进制 其实我…