Git-学习记录

news2024/11/29 0:45:48

文章目录

  • 1. Git-基础
    • 1.1 获取 Git 仓库
    • 1.2 记录每次更新到仓库
    • 1.3 远程仓库的使用
  • 2. Git-分支
    • 2.1 Git 分支的新建与合并
    • 2.2 Git 分支的管理

1. Git-基础

1.1 获取 Git 仓库

通常有两种获取 Git 项目仓库的方式:

  1. 将尚未进行版本控制的本地目录转换为 Git 仓库;
  2. 从其它服务器 克隆 一个已存在的 Git 仓库。

1. 在已存在目录中初始化仓库:
先进入文件夹:

$ cd /home/xx/codes/go/src/my_project

之后执行:

$ git init

该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。

2. 克隆现有的仓库:
克隆仓库的命令是 git clone github_url 。比如可以用下面的命令:

$ git clone https://github.com/hualuo321/golearn.git

1.2 记录每次更新到仓库

现在我们的机器上有了一个 真实项目 的 Git 仓库,并从这个仓库中检出了所有文件的 工作副本。 通常,你会对这些文件做些修改,每当完成了一个阶段的目标,想要将记录下它时,就将它提交到仓库。

检查当前文件状态:
可以用 git status 命令查看哪些文件处于什么状态。

$ git status
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean

这说明你现在的工作目录相当干净,所有已跟踪文件在上次提交后都未被更改过。

现在,让我们在项目下创建一个新的 README 文件。 如果之前并不存在这个文件,使用 git status 命令,你将看到一个新的未跟踪文件:

$ echo 'My project' > README
$ git status
On branch main
Your branch is up to date with 'origin/main'.
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        README
nothing added to commit but untracked files present (use "git add" to track)

在状态报告中可以看到新建的 README 文件出现在 Untracked files 下面。 未跟踪的文件意味着 Git 在之前的快照(提交)中没有这些文件;

跟踪新文件:
使用命令 git add 开始跟踪一个文件。 此时再运行 git status 命令,会看到 README 文件已被跟踪,并处于暂存状态:

$ git add README
$ git status
On branch main
Your branch is up to date with 'origin/main'.
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   README

提交更新:
现在的暂存区已经准备就绪,可以提交了。 在此之前,请务必确认还有什么已修改或新建的文件还没有 git add 过, 否则提交的时候不会记录这些尚未暂存的变化。

每次准备提交前,先用 git status 看下,你所需要的文件是不是都已暂存起来了, 然后再运行提交命令 git commit

$ git commit

编辑器会显示类似下面的文本信息(本例选用 Vim 的屏显方式展示):

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch main
# Your branch is up to date with 'origin/main'.
# Changes to be committed:
#       new file:   README

另外,你也可以在 commit 命令后添加 -m 选项,将提交信息与命令放在同一行,如下所示:

$ git commit -m '功能1已完成'
[main e5eb4cb] 功能1已完成
 1 file changed, 1 insertion(+)
 create mode 100644 README

1.3 远程仓库的使用

为了能在任意 Git 项目上协作,你需要知道如何管理自己的远程仓库。 远程仓库是指托管在因特网或其他网络中的你的项目的版本库。

查看远程仓库:
如果想查看你已经配置的远程仓库服务器,可以运行 git remote 命令。 它会列出你指定的每一个远程服务器的简写。 如果你已经克隆了自己的仓库,那么至少应该能看到 origin ——这是 Git 给你克隆的仓库服务器的默认名字:

$ git remote
origin

你也可以指定选项 -v,会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL。

$ git remote -v
origin  https://github.com/hualuo321/golearn.git (fetch)
origin  https://github.com/hualuo321/golearn.git (push)

添加远程仓库:
运行 git remote add 添加一个新的远程 Git 仓库,同时指定一个方便使用的简写:

$ git remote add gol https://github.com/hualuo321/golearn
$ git remote -v
gol     https://github.com/hualuo321/golearn (fetch)
gol     https://github.com/hualuo321/golearn (push)
origin  https://github.com/hualuo321/golearn.git (fetch)
origin  https://github.com/hualuo321/golearn.git (push)

从远程仓库中抓取与拉取:
从远程仓库中获得数据,可以执行:

$ git fetch gol

这个命令会访问远程仓库,从中拉取所有你还没有的数据。 执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。

如果你使用 clone 命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以 “origin” 为简写。 所以,git fetch origin 会抓取克隆(或上一次抓取)后新推送的所有工作。 必须注意 git fetch 命令只会将数据下载到你的本地仓库——它并不会自动合并或修改你当前的工作。

推送到远程仓库:
当你想分享你的项目时,必须将其推送到上游。git push <remote> <branch>

2. Git-分支

2.1 Git 分支的新建与合并

首先,我们假设你正在项目中愉快地工作,并且已经提交了几次更新。
在这里插入图片描述
现在,你决定要修补问题追踪系统上的 #53 问题,要新建并切换到该分支,运行 git checkout 并加上 -b参数:

$ git checkout -b iss53
Switched to a new branch 'iss53'

这相当于执行下面这两条命令:

$ git branch iss53
$ git checkout iss53

在这里插入图片描述
接着你开始尝试修复问题,在提交了若干次更新后,iss53 分支的指针也会随着向前推进,因为它就是当前分支。

$ vim index.html
$ git commit -a -m 'added a new footer [issue 53]'

在这里插入图片描述
目前已经提交了所有的修改,所以接下来可以正常转换到 master 分支:

$ git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.

接下来,你得进行紧急修补。我们创建一个紧急修补分支 hotfix 来开展工作,直到搞定:

$ git checkout -b hotfix
Switched to a new branch 'hotfix'
$ vim index.html
$ git commit -a -m 'fixed the broken email address'

在这里插入图片描述
有必要作些测试,确保修补是成功的,然后回到 main 分支并把它合并进来,然后发布到生产服务器。用 git merge 命令来进行合并:

$ git checkout main
$ git merge hotfix
Updating fe39e83..027d6b7
Fast-forward
 index.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

请注意,合并时出现了“Fast forward”的提示。由于当前 master 分支所在的提交对象是要并入的 hotfix 分支的直接上游,Git 只需把 master 分支指针直接右移。换句话说,如果顺着一个分支走下去可以到达另一个分支的话,那么 Git 在合并两者时,只会简单地把指针右移,因为这种单线的历史分支不存在任何需要解决的分歧,所以这种合并过程可以称为快进(Fast forward)。
在这里插入图片描述
由于当前 hotfix 分支和 master 都指向相同的提交对象,所以 hotfix 已经完成了历史使命,可以删掉了。使用git branch 的 -d 选项执行删除操作:

$ git branch -d hotfix
Deleted branch hotfix (was 027d6b7).

现在回到之前未完成的 #53 问题修复分支上继续工作:

$ git checkout iss53
Switched to branch 'iss53'
$ vim index.html
$ git commit -a -m 'finished the new footer [issue 53]'

在这里插入图片描述
在问题 #53 相关的工作完成之后,可以合并回 master 分支。实际操作同前面合并 hotfix 分支差不多,只需回到 master 分支,运行 git merge 命令指定要合并进来的分支:

$ git checkout master
$ git merge iss53

请注意,这次合并操作的底层实现,并不同于之前 hotfix 的并入方式。Git 会用两个分支的末端(C4 和 C5)以及它们的共同祖先(C2)进行一次简单的三方合并计算。
在这里插入图片描述
这次,Git 没有简单地把分支指针右移,而是对三方合并后的结果重新做一个新的快照,并自动创建一个指向它的提交对象(C6)。
在这里插入图片描述

2.2 Git 分支的管理

  • 显示当前所有分支:
git branch
  • 删除某分支
git branch -d my_branch

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

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

相关文章

一文解决从进程栈内存底层原理到Segmentation fault报错

栈是编程中使用内存最简单的方式。例如&#xff0c;下面的简单代码中的局部变量 n 就是在堆栈中分配内存的。 #include <stdio.h> void main() {int n 0;printf("0x%x\n",&v); } 那么我有几个问题想问问大家&#xff0c;看看大家对于堆栈内存是否真的了…

maven deploy上传本地jar至私服

1.场景 首先目前依赖包的管理大多数是maven&#xff0c;其次当使用到第三方的包的时候&#xff0c;官方的仓库或者aliyun的maven都是没有这个包的。那么&#xff0c;为了方便我们使用 我们需要将本地的这个jar上传到 公司内部的私服去&#xff0c;以便大家使用 2. 上操作 我…

VS Code 用作嵌入式开发编辑器

使用 Keil MDK 进行嵌入式开发时&#xff0c;Keil 的编辑器相对于主流编辑器而言有些不方便&#xff0c;比如缺少暗色主题、缺少智能悬停感知&#xff08;鼠标停在一个宏上&#xff0c;能自动展开最终的宏结果&#xff09;、代码补全不好用等等&#xff0c;所以推荐使用 VS Cod…

【Java技术】基于Http的文件断点续传实现

1.断点续传的介绍 客户端软件断点续传指的是在下载或上传时&#xff0c;将下载或上传任务(一个文件或一个压缩包)人为的划分为几个部分&#xff0c;每一个部分采用一个线程进行上传或下载&#xff0c;如果碰到网络故障&#xff0c;可以从已经上传或下载的部分开始继续上传下载…

电子科技大学操作系统期末复习笔记(二):进程与并发控制

目录 前言 进程管理 进程基本知识 程序的顺序执行 前趋图 程序的并发执行 并发程序 进程的定义和特征 进程的特征和状态 操作系统内核 定义 功能 原语 原子操作的实现 操作系统控制结构 进程控制块PCB 进程组织&#xff08;进程树&#xff09; 进程的创建 …

3DMAX高级弯曲插件使用教程

3dMax高级弯曲插件是对3dmax原生“弯曲&#xff08;Bend&#xff09;”修改器的一个增强&#xff0c;给用户更多控制弯曲修改器的参数设置&#xff0c;它让用户输入宽度&#xff0c;插件脚本将移动中心以获得正确的宽度。 主要特性&#xff1a; - 使用智能捕捉捕捉到自定义网格…

静态库和动态库的制作

一、什么叫做库&#xff1a; 库&#xff1a;二进制的程序&#xff0c;能被操作系统载入内存中执行 二、Linux下的库有两种&#xff1a;静态库和共享库(动态库)&#xff0c;二者的不同点在于代码载入的时刻不同。 A、静态库在程序编译的时候并会被连接到目标代码中&#xff0c;程…

SSM项目-商城后台管理系统

SSM项目-商城后台管理系统开发说明开发环境项目界面演示项目功能具体的技术指标开发过程1、搭建SSM框架1.1、建库建表1.2、新建Maven工程1.3、配置pom.xml1.4、目录结构1.5、jdbc.properties1.6、mybatis-config.xml1.7 两个Spring的配置文件applicationContext_dao.xmlapplica…

数据库(三)

第三章 MySQL库表操作 3.1 SQL语句基础 3.1.1 SQL简介 SQL&#xff1a;结构化查询语言(Structured Query Language)&#xff0c;在关系型数据库上执行数据操作、数据检索以及数据维护的标准语言。使用SQL语句&#xff0c;程序员和数据库管理员可以完成如下的任务。 改变数据…

【图解数据结构与算法】数据结构与算法知识点整理 Data Structures and Algorithms

程序数据结构算法 数据结构是可以存储和组织数据的命名位置。 算法是用于解决特定问题的一组步骤。 数据结构是指&#xff1a;一种数据组织、管理和存储的格式&#xff0c;它可以帮助我们实现对数据高效的访问和修改。 数据结构 数据元素 元素之间的结构。 如果说数据结…

什么人合适学习Python

发了几天的Python基础&#xff0c;也认识了一些朋友&#xff0c;忽然有人问起&#xff0c;说为啥学Python&#xff0c;或者说啥人学习Python&#xff0c;作为一个教龄8年从Python一线讲师到Python教学主管的我和大家分享一下个人的看法&#xff0c;还是提前说一下&#xff0c;个…

winapi模拟鼠标按住左键拖动

继前文《windows下通过uiAutomation技术获取ui元素》介绍获取ui元素信息后&#xff0c;还需要对信息进行修改&#xff0c;但是 uiAutomation 技术并未提供可修改的 api&#xff0c;只能另辟他径看看了。 以 camera raw 为例&#xff0c;已知的是可将鼠标放在指定区域位置&#…

电力国家(行业)标准目录

1、3&#xff5e;63kV交流高压负荷开关 GB 3804-90 代替 GB 3804-882、电气装置安装工程35kV及以下架空电力线路施工及验收规范Code for construction and acceptance of 35kVand umder over head power levels electricequipment installation engineeringGB50173—923、带电作…

论文文献引用规范和标准(国标GBT7714)@endnote国标样式@citation交叉引用编号

文章目录论文文献引用规范和标准&#xff08;国标GBT7714&#xff09;国标GBT7714-2015endnote stylerefs简述国标GBT7714条目的组织格式&#x1f388;Noteword中的文献交叉引用超链接[编号]&#x1f388;正则高级搜索批量选中引用序号上标调整更新引用编号项段落内容对齐居中&…

python爬虫学习记录

初识爬虫 爬虫的概念 「什么是爬虫」 爬虫&#xff1a;通过编写程序&#xff0c;模拟浏览器上网&#xff0c;并抓取有价值的数据的过程 反爬虫&#xff1a;门户网站通过制定相应的策略或技术手段&#xff0c;来阻止爬虫程序对其网站数据的爬取 反反爬&#xff1a;爬虫程序…

操作系统(五)页面置换算法与分配策略

操作系统&#xff08;五&#xff09;页面置换算法与分配策略 一、页面置换算法 1、最佳置换算法&#xff08;OPT&#xff09; 每次选择淘汰的页面将是以后永不使用&#xff0c;或者在最长时间内不再被访问的页面&#xff0c;这样可以保证最低的缺页率 实际上就是从当前内存块…

【Kubernetes】【一】Kubernetes介绍

Kubernetes介绍 应用部署方式演变 在部署应用程序的方式上&#xff0c;主要经历了三个时代&#xff1a; 传统部署&#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物理机上 优点&#xff1a;简单&#xff0c;不需要其它技术的参与 缺点&#xff1a;不能为应用程序定…

PDF SDK for Linux 8.4.2 Crack

PDF SDK for Linux 是适用于任何 Linux 企业或云应用程序的强大解决方案&#xff0c;非常适合需要完全可定制的 PDF 查看器或后端流程的任何 Linux 开发人员。 将 Foxit PDF SDK 嵌入到基于 Linux 的应用程序中非常容易。只需打开您最喜欢的 Linux IDE&#xff0c;复制您需要的…

电容笔和Apple pencil的区别有啥?学生党电容笔推荐

普通的电容笔与 Apple Pencil最大的区别在于&#xff0c;普通的电容笔没有像苹果电容笔那样的重力压感&#xff0c;而仅仅只有一个倾斜的压敢。但平替电容笔的其他性能也很不错&#xff0c;几乎和苹果 Pencil一样&#xff0c;而且平替电容笔的售价只需200元左右。目前&#xff…

react+antd+Table里切换Switch改变状态onChange 传参

场景&#xff1a;table列表里面&#xff0c;操作用Switch切换状态。对应列改变操作在colums里面// 表格行const colums: ColumnsType<potentialType> [{title: useLocale(创建时间),dataIndex: creation_date,key: creation_date,align: center,render: (v: string, rec…