从零开始一个git操作实例,图文并茂

徒弟不懂git怎么用,

于是写了篇文章,

把本地git操作从头写了一遍,

自己去看吧!

img

0、基本概念

•Git是一个免费、开源的、分布式版本控制系统

•它使用一个特殊的叫做仓库的数据库来记录文件的变化

•仓库中的每个文件都有一个完整的版本历史记录

1)安装

sudo apt-update
sudo apt-get install git
git --version

2)工作流转

Git 管理项目时,文件流转的三个工作区域:Git 的工作目录,暂存区域,以及本地仓库。

你的本地仓库由 git 维护的三棵"树"组成。

  • 工作目录:它持有实际文件;

  • 暂存区(Index):它像个缓存区域,临时保存你的改动;

  • 本地仓库(Respository):可以把本地仓库理解成一个目录,这个目录中所有的文件都可以被Git管理起来

    每个文件的删除、修改、新增操作都可以被Git跟踪到

    以便任何时候,都可以追踪历史或者还原到之前的某一个版本

    HEAD,它指向你最后一次提交的结果

3)文件3种状态

对于任何一个文件,在 Git 内都只有三种状态:已修改(modified),已暂存(staged)和已提交(committed)

  • 已修改表示修改了某个文件,但还没有提交保存;
  • 已暂存表示把已修改的文件放在下次提交时要保存的清单中; add
  • 已提交表示该文件已经被安全地保存在本地数据库中了。commit

一、创建仓库并提交第1个commit

步骤1-4流程,参考下图流程会更清晰一些

1、创建仓库

使用当前目录作为Git仓库,我们只需使它初始化。

git init

该命令执行完后会在当前目录生成一个 .git 目录。

2、新建本地文件

本地增加文件url.c、README.md

实用git status查看文件状态,红色部分,有2个未跟踪的在文件

3、提交文件到暂存区git add

你可以提出更改(把它们添加到暂存区),使用如下命令:

git add <filename>
git add .      //添加所有文件
git add *.c    //添加所有c文件

执行下面操作:

git add *.c 
git add README.md

4、提交改动git commit

使用如下命令以实际提交改动:

git commit -m "代码提交信息"

或者

git commit

然后进入vim编辑器,添加提交信息

例如:

git commit -m '初始化项目版本'

以上命令将目录下以 .c 结尾及 README 文件提交到仓库中。

现在,刚才的改动已经提交到了 HEAD,但是还没到远端仓库。

可以使用git log查看所有的提交:

5、推送改动git push

刚才的改动现在已经在本地仓库的 HEAD 中了。

执行如下命令以将这些改动提交到远端仓库

git push origin master

可以把 master 换成你想要推送的任何分支

如果你还没有克隆现有仓库,并欲将你的仓库连接到某个远程服务器,你可以使用如下命令添加:

git remote add origin <server>

如此你就能够将你的改动推送到所添加的服务器上去了。

三、 分支操作

分支是用来将特性开发绝缘开来的。在你创建仓库的时候,master 是"默认的"分支

在其他分支上进行开发,完成后再将它们合并到主分支上。

0)查看分支

列出分支基本命令:

git branch

没有参数时,git branch 会列出你在本地的分支。

此例的意思就是,我们有一个叫做 master 的分支,并且该分支是当前分支。
执行 git init 的时候,默认情况下 Git 就会为你创建 master 分支。
分支在本地完成,速度快。

1)创建分支

要创建一个新的分支,我们使用branch命令。

git branch test

由上图所示:

  1. 多了一个分支test
  2. 当前分支为主分支master,前面*表示活动分支

2)切换分支

branch命令不会将我们带入分支,只是创建一个新分支。所以我们使用checkout命令来更改分支。

git checkout test

创建一个叫做"test"的分支,并切换过去:

git checkout -b test

如上图所示:

  1. 分支test前面有*,所以当前活动分支为master

分支创建和切换参考下图:

3)切回master分支并合并

在分支test上,修改文件url.c,然后commit

切换回主分支并合并

git checkout master
git merge test

由上图所示,git merge test后,主分支多了一个新的commit b9217

注意:

对其他分支的更改不会反映在主分支上。如果想将更改提交到主分支,则需切换回master分支,然后使用合并。

4)删除分支

使用-d标识,把新建的分支删掉:

git branch -d test
git branch -D test

如上图,我们删除了分支test

5)上传分支push

除非你将分支推送到远端仓库,不然该分支就是 不为他人所见的:

git push origin <branch>

四、替换本地改动git checkout

假如操作失误可以使用如下命令替换掉本地改动:

git checkout -- <filename>

此命令会使用 HEAD 中的最新内容替换掉你的工作目录中的文件

已添加到暂存区的改动以及新文件都不会受到影响。

  • 步骤

修改文件url.c,增加信息

//this change will be delete by git checkout

然后再git checkout url.c

如上图所示,

执行下面命令后:

git checkout url.c

url.c修改的信息

//this change will be delete by git checkout

已经被删除了,此时工作区域文件还原到了commitb 9217状态

查看url.c:
在这里插入图片描述

假如你想丢弃你在本地的所有改动与提交,可以到服务器上获取最新的版本历史,并将你本地主分支指向它:

git fetch origin
git reset --hard origin/master

五、重置git reset

当我们不想要之前提交的修改时,就会用到这个命令。也许这是一个 错误的提交或者可能是引入了 bug 的提交,这时候就要执行 git reset。

git reset 能让我们不再使用当前台面上的文件,让我们可以控制 HEAD 应该指向的位置。

1)软重置

软重置会将 HEAD 移至指定的提交(或与 HEAD 相比的提交的索引),而不会移除该提交之后加入的修改!

输入 git status 后,你会看到我们仍然可以访问在之前的提交上做过的所有修改。

这意味着我们可以修复这些文件的内容,之后再重新提交它们!

2)硬重置

有时候我们并不想保留特定提交引入的修改。不同于软重置,我们应该再也无需访问它们。

Git 应该直接将整体状态直接重置到特定提交之前的状态:这甚至包括你在工作目录中和暂存文件上的修改。

我们重新add并commit,然后硬重置

可见我们所有提交的信息都已经被移除,

工作区域文件恢复到commit 7bb299状态。

打开文件,查看,添加信息已经不存在,

六、还原git revert

另一种撤销修改的方法是执行 git revert。

通过对特定的提交执行还原操作,我们会创建一个包含已还原修改的新提交。

新创建文件peng.c并提交

用git revert 撤销修改

由上图所示,执行git revert 209485之后,我们新增的文件peng.c被删除,并提交了1个新的commit 5b08d

此前添加peng.c文件的提交还在,这样就保留了该提交信息,提高了仓库的兼容性。

在撤销特定的提交时,git revert 非常有用,同时也不会修改分支的历史。
在这里插入图片描述

七、拣选git cherry-pick

当一个特定分支包含我们的活动分支需要的某个提交时,我们对那个提交执行 cherry-pick!

对一个提交执行 cherry-pick 时,我们会在活动分支上创建一个新的提交,其中包含由拣选出来的提交所引入的修改。

创建切换到cherry分支,

git branch cherry
git checkout cherry 

在分支cherry上修改文件README.md提交几个节点

切回master分支

git checkout master

执行git cherry-pick b98fc77

由上图所示,分支cherry的commit b98fc77,被复制到分支master,并创建了1个新的提交2d995,

通过该命令我们就可以将其他分支,需要的提交,合并到主分支master。

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

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

相关文章

【网络】TCP协议的简单使用

目录 echo_service server 单进程单线程 多进程 多线程 线程池 client echo_service_code echo_service 还是跟之前UDP一样&#xff0c;我们先通过实际的代码来实现一些小功能&#xff0c;简单的来使用TCP协议进行简单的通信&#xff0c;话不多说&#xff0c;我们先实现…

Redis面试真题总结(四)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ AOF 持久化&#xff1f; AOF&#xff08;Append Only File&#x…

Selenium4.0实现自动搜索功能

01.Selenium4.0实现搜索功能 1.安装Selenium及查看Selenium版本 pip install selenium pip show seleniumfrom selenium import webdriver from chromedriver_py import binary_path import time from selenium.webdriver.common.by import By from selenium.webdriver.commo…

智能农业系统——土壤养分运移转化

橙蜂智能公司致力于提供先进的人工智能和物联网解决方案&#xff0c;帮助企业优化运营并实现技术潜能。公司主要服务包括AI数字人、AI翻译、AI知识库、大模型服务等。其核心价值观为创新、客户至上、质量、合作和可持续发展。 橙蜂智农的智慧农业产品涵盖了多方面的功能&#x…

鸿蒙OpenHarmony【轻量系统内核扩展组件(C++支持)】子系统开发

C支持 基本概念 C作为目前使用最广泛的编程语言之一&#xff0c;支持类、封装、重载等特性&#xff0c;是在C语言基础上开发的一种面向对象的编程语言。 运行机制 C代码的识别主要由编译器支持&#xff0c;系统主要对全局对象进行构造函数调用&#xff0c;进行初始化操作。…

H264-NAL

目录 错误日志NAL简介参考资料 错误日志 拉流时存在如下日志,会因为拉流失败导致之后的任务也停止 missing picture in access unit with size 16384 Invalid NAL unit size Error splitting the input into NAL units. 之后只要设置抓取异常后&#xff0c;重新拉流&#xff…

zabbix email 告警

配置媒介、触发器动作&#xff08;动作、操作&#xff09; 为用户 定义媒体&#xff0c;比如电子邮件地址 动作 - 条件

手机在网状态查询接口如何用PHP进行调用?

一、什么是手机在网状态查询接口&#xff1f; 手机在网状态查询接口&#xff0c;即输入手机号码查询手机号在网状态&#xff0c;返回有正常使用、停机、在网但不可用、不在网&#xff08;销号/未启用/异常&#xff09;、预销户等多种状态。 二、手机在网状态查询适用哪些场景…

数据结构(7.3_4)——红黑树的定义和性质

红黑树和平衡排序二叉树的查插删时间 平衡二叉树的适用场景&#xff1a;适用以查为主、很少插入/删除vd场景 红黑树&#xff1a;适用于频繁插入、删除的场景&#xff0c;实用性更强 红黑树的考点 红黑树的定义&#xff1a; 红黑树的二叉排序树&#xff1a;左子树结点值<…

EvilScience靶机详解

主机发现 arp-scan -l 得到靶机ip 192.168.229.152 端口扫描 nmap -sV -A -T4 192.168.1.20 这段代码使用 nmap 命令来扫描目标主机 192.168.1.20&#xff0c;并执行以下操作&#xff1a;-sV&#xff1a;探测开放的端口&#xff0c;以确定服务/版本信息。-A&#xff1a;启…

【软件工程】可行性研究

一、目的 二、任务 三、步骤 四、结果&#xff1a;可行性研究报告 例题 选择题

Java基础-零拷贝

文章目录 什么是零拷贝&#xff1f;传统IO执行过程零拷贝的意义零拷贝的主要实现方式实际应用场景零拷贝的优势零拷贝的局限性 Java 中的零拷贝实现FileChannel.transferTo()FileChannel.transferFrom() 相关知识点解释什么是DMA内核空间和用户空间什么是用户态、内核态什么是上…

前端——实现时钟 附带小例子

创建日期对象 toLocaleDateString() 获取日期 console.log(date.toLocaleDateString()) toLocaleTimeString() 获取时间 console.log(date.toLocaleTimeString()) toLocaleString() 获取日期和时间 console.log(date.toLocaleString()) date.getDay() 获取星期几 周日为…

计算机毕业设计选题推荐-基于python+Django的全屋家具定制服务平台

精彩专栏推荐订阅&#xff1a;在下方主页&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f496;&#x1f525;作者主页&#xff1a;计算机毕设木哥&#x1f525; &#x1f496; 文章目录 一、全屋家具定制…

H264参考帧列表管理

P/SP/B帧的参考帧列表的初始化 参考H.264标准文档的8.2.4.2章节&#xff0c;暂不研究场编码。在初始化P/SP帧或B帧的参考帧列表过程中&#xff0c;DPB中至少要存在一个有效的、即被标记为“用于短期或长期参考”的参考帧。 P/SP Slice 参考帧列表初始化 P/SP Slice参考帧列表…

《算法岗面试宝典》正式发布

大家好&#xff0c;历时半年完善&#xff0c;《算法岗面试宝典》 终于可以跟大家见面了。 最近 ChatGPT 爆火&#xff0c;推动了技术圈对大模型算法场景落地的热情&#xff0c;就业市场招聘人数越来越多&#xff0c;算法岗一跃成为竞争难度第一的岗位。 岗位方向 从细分方向…

汽车总线之----CAN总线

Introduction 早期的车辆网络是点对点的模式&#xff0c;臃肿繁杂且效率低下 现在是以总线的模式&#xff0c;很明显线路简洁清爽了很多。 高速CAN可以支持1M/s的速率&#xff0c;低速CAN可以支持125k/s的速率 CAN节点的内部结构图(Structure of CAN-Bus and electronic C…

*C++:list

一.list简介 1. list 是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 2. list 的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向其前一个元素和后一个元素…

redisson 延迟队列实现任务过期监听

一、需求&#xff1a; 任务超过一个小时以后&#xff0c;如果还为待执行状态&#xff0c;则自动转为结束状态。 二、实现: 创建延迟队列的监听任务RedisDelayedQueueListener&#xff0c;消费延迟队列&#xff1b;创建新增延迟队列的类&#xff0c;用于创建延迟队列&#xf…

ACM MM24 | Hi3D: 3D生成领域再突破!新视角生成和高分辨率生成双SOTA(复旦智象等)

文章链接&#xff1a;https://arxiv.org/pdf/2409.07452 Github 链接&#xff1a;https://github.com/yanghb22-fdu/Hi3D-Official 亮点直击 本文提出了高分辨率图像到3D模型&#xff08;Hi3D&#xff09;&#xff0c;这是一种基于视频扩散的新范式&#xff0c;将单个图像重新定…