Git&GitHub简明使用

2023-11-07

主体内容来自B站UP主冯雨的视频教程,此为个人笔记分享,同时涉及对原视频的一些补充。原视频链接

语雀笔记链接

介绍

Git和GitHub是什么

Git是一个运行在电脑上的版本控制软件,GitHub是基于Git打造的网站。
Git的三个概念:提交commit、仓库repository、分支branch

安装

Git
vscode

一些GitHub上搜索的关键词

  • 找百科大全:awesome xxx
  • 找示例:xxx sample
  • 找项目框架:xxx starterxxx boilerplate
  • 找教程:xxx tutorial

Git操作及VSCODE图形化操作

  • VSCODE需要安装拓展GitLens后可以使用图形界面管理Git仓库。
  • 在VSCODE中,使用查看→终端可以使用集成在其中的终端界面,可以起到替代Git Bash的作用,不用再打开新的终端窗口。
  • 在VSCODE的源代码管理栏进行Git相关的操作。

下载仓库

git clone <repository url>

使用git clone与网页选择下载.zip压缩文件相比,多出了名为./.git/的隐藏文件夹。因为压缩文件解压后得到的是项目代码,而使用git clone得到的是克隆到本地的仓库。

初始化仓库

GitBash命令行

git init

在项目文件夹下打开Git Bash,输入git init初始化仓库,初始化为仓库后可以通过提交等操作进行代码版本控制。
仓库文件夹下会生成./.git/文件夹,用于保存仓库信息和提交历史信息,删除会导致git及仓库相关的信息丢失。

VSCODE - 源代码管理

可以一键初始化仓库。
会自动将当前仓库的文件与现有文件进行比较,绿色的U表示新增的文件,黄色的M表示修改过的文件。

设定使用git的身份

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

指令中去除--global选项为仅在当前项目使用该身份。

提交

流程示意如下

git add 'filename'
git commit
工作区
暂存区
仓库/提交区

GitBash命令行

将文件加入暂存区

git add -A
git add <filename>

-A 表示将所有的文件都加入暂存区。

将暂存区文件提交到仓库

git commit -m "提交信息"

提交信息中进行对本次提交的简单说明。

VSCODE - 源代码管理

  1. 更改栏下表示工作区里相对仓库新进行的更改。
  2. 点击文件旁的’+‘将文件添加到暂存区(=git add <filename>)。
  3. 点击更改栏目旁的’+‘将所有存在更改的文件添加到暂存区(=git add -A)。
  4. 暂存的更改栏目下表示已经由工作区提交到暂存区的更改。
  5. 源代码管理下的消息位置输入本次提交信息,点击提交(Ctrl+Enter) 完成提交。

查看提交历史

GitBash命令行

查看仓库提交历史

git log --start

使用--start可以看到较为详细的信息。
可以看到每次commit的Hash值,使用哈希值可以用于索引表示本次提交。

VSCODE - 源代码管理

COMMITS栏目中可以查看提交历史,可以点击文件查看更改信息。

项目的维护日常(版本回滚)

GitBash命令行

工作区内容回滚到上一次提交状态

git checkout <filename>

checkout的主要功能就是迁出一个分支的特定版本,默认是迁出分支的HEAD版本。
如下为一些使用示例:

git checkout master
# 取出master版本的head。 

git checkout <tag_name> 
# 在当前分支上取出<tag_name>的版本 

git checkout master <filename> 
# 放弃当前对文件file_name的修改 

git checkout <commit_id> <filename> 
# 取文件<filename>在<commit_id>次提交的内容。<commit_id>为git commit时的哈希值。

撤回提交

git reset HEAD^1
  1. HEAD是本次需要回滚的状态,^1表示上一个状态,1为缺省值。
  2. 提交历史中会消除记录。
  3. 提交状态会退回到上次提交前,但文件仍然是更改后的,即此时HEAD指向暂存区,可以继续修改,若要恢复更改仍然需要进行checkout

reset命令

git reset [--soft | --mixed | --hard] [HEAD]
  • --mixed为缺省,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。
  • --soft只进行对操作的回退,不影响工作区的文件。可以使用哈希值指代提交,或者使用HEAD指针指代相对状态。
  • --hard回退作用与--soft类似,但是会改变工作区文件。

关于HEAD的一些说明

  • HEAD是一个指针,指示了文件管理的状态,会随着addcommit指令在暂存区和提交区之间来回移动,不会指向工作区。
  • HEAD表示了指向位置的文件管理状态,回滚到HEAD则是将当前的工作状态重置到与HEAD指向位置相同的状态。
  • 一次提交(commit)之后,HEAD指向当前的提交区,HEAD则指向的是提交前的暂存区。如果reset到HEAD则会回到上一次提交前,处于暂存区的状态。此时即在工作区更改完成,提交到了暂存区,还未提交的状态。
  • 同理一次add操作后,HEAD指向的是当前的暂存区,HEAD指向提交区。如果reset到HEAD则会回到上一次提交后的状态。此时即刚刚完成上一次提交的状态,暂存区没有文件。
指代位置 表示方式1 表示方式2
当前位置 HEAD HEAD~0
上一个位置 HEAD1/HEAD HEAD~1
上上一个位置 HEAD2/HEAD^ HEAD~2

VSCODE - 源代码管理

  1. 更改中点击放弃更改的箭头按钮即可将工作区的更改恢复到上次提交状态。
  2. COMMITS栏目中选中需要撤回的提交,点击右键→Undo Commit完成提交的撤回,更改后的文件仍在暂存区,点击暂存区文件旁的’-‘将文件从暂存区移到更改区。
  3. FILE HISTORY栏目下可以查看与当前文件相关的提交历史和改动位置情况,需要跨多个版本的回滚和更改时建议不删除提交,只用原版本的文件内容替换当前工作区内容,此时不会删除之前的提交历史,仍然可以回滚维护,使得文件版本更加稳定可控。

分支

在VSCODE命令终端中进行

当前节点新建分支

git checkout -b <branchname>

新建分支的同时切换到新建分支。

列举所有分支

git branch

切换到某个分支

git checkout <branchname>

合并分支

git merge <branchname>
  1. 先切换到master分支,再使用该命令,将<branchname>分支的更改合并到master分支中。
  2. 文件会出现在合并更改栏目中,与更改栏目等类似地提交到暂存区和最终提交。
  3. 分支中更新的内容会进行更新替换,在不同分支中都进了更改的内容会高亮提示需要人为选择与修改。可以在合并更改栏目中右键待合并的文件选择全部采用当前内容或全部采用传入版本。
    • Accept Current Change - 保留合并前的内容
    • Accept Incoming Change - 保留待合并分支的内容
    • Accept Both Changes - 全部保留

终止当前合并操作

git merge --abort

如果出现冲突需要等待合作商讨解决,可以使用该命令终止当前合并操作

删掉指定分支

git branch -D <branchname>

往往在分支合并后当前分支的任务已经完成,可以删除处理。

VSCODE图形操作

BRANCHES栏目中进行分支的增删合并等操作。

TAG

可以创建一个tag来指向软件开发中的一个关键时期(一次关键提交),比如版本号更新时可以建立“v2.0”、“v3.1”标签,这样在以后回顾的时候会比较方便。
tag的主要操作有:查看tag、创建tag、验证tag以及共享tag。

查看tag

列出所有tag

git tag

列出的tag是按字母排序的,和创建时间无关。

如果只想查看某些tag的话,可以加限定:

git tag -l v1.*
# 这样就只会列出1.*的TAG

创建tag

创建tag

git tag v1.0

附带信息的tag

git tag -a v1.0 -m 'first version'

-m后添加注释信息,方便日后查看。

有签名的tag

git tag -s v1.0 -m 'first version'

需要有有GPG私钥。

为以前的commit添加tag

首先查看以前的commit。

git log --oneline

假如有commit:8a5cbc2
使用哈希值索引,为该提交添加tag。

git tag -a v1.1 8a5cbc2

删除tag

git tag -d v1.0

验证tag

git tag -v v1.0

需要GPG私钥。

Git与GitHub远程仓库

远程仓库的推送和拉取

在GitHub建立新仓库后,可以多人远端合作项目。
新建仓库后GitHub会提示上传新建仓库和上传已有仓库的不同指令,依照提示依次执行即可。

推送

git push

在对应需要更改的分支下使用该命令,将该分支下的更改推送到远程仓库。

拉取

git pull

如果存在远程有而本地还未有的更新,如其他人的更新或者直接在GitHub页面上对远程仓库进行的修改,可以通过该指令拉取到本地。

注意: 如果远程已有更新而本地未有,在推送之前需要先拉取远端的更新,与本地多分支合并时的处理相同,在本地确认完成后再推送至远端。

共享tag

执行git push时,tag不会上传到服务器,为了共享这些tag,需要使用:

git push origin –tags
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Git&GitHub简明使用 的相关文章

随机推荐

  • C++:常见错误LNK2019的几种原因

    转自 https www cnblogs com thisway p 5497200 html error LNK2019问题在VC 6 0中是error LNK2001 unresolved external symbol问题 可能错误号
  • NEUQ OJ 1233: 幸运儿

    题目描述 n 个人围成一圈 并依次编号1 n 从编号为1 的人开始 按顺时针方向每隔一人选出一个 剩下的人重新围成一圈 如此循环直到剩下两人 这剩下的两人就是幸运儿 如果你想成为最后两个幸运儿 请问开始时应该站在什么位置 设3 lt n l
  • 阻止默认事件的方法_React 基础:3种事件绑定方式,避免 this 引用丢失

    前言 这系列是 React 基础教程 参考 React 官网 记录了自己入门学习 React 的笔记 不太适合有 React 丰富经验的同学 但希望看到此文的你 多少都有些收获 文章代码均可在我的码云中找到 https gitee com
  • flutter图片预览_Flutter 视频缩略图

    在做即时通讯前整理了一个视频缩略图的工具类 可供码农直接放入项目中使用 涉及到的插件 video player 0 10 11 2 话不多说代码如下 import package flutter material dart import p
  • Linux系统架构概述

    一 Unix Linux架构 严格意义上 操作系统定义为 控制计算机硬件资源的软件 同时提供坏境让程序可以运行 Linux系统一般有4个主要部分 内核 shell 文件系统和应用程序 内核 shell和文件系统一起形成了基本的操作系统结构
  • 【DahO安装及使用】

    1 安装 Step 1 官网注册帐号 注册地址在这里 注册完毕默认登录 Step 2 点击下载链接 下载你需要的版本 这里 我下载的是DashO的Windows版本 下载完毕后官方会向您发送邮件 复制其中的 key Step 3 下载完毕后
  • 程序员常用的快捷键,你都用到了吗

    Windows系列 Windows M 最小化所有窗口 Windows R 运行某个程序 打开运行窗口 开启运行对话框 Windows E 快速打开我的电脑 Windows L 电脑锁屏 Windows D 显示 恢复桌面 Windows
  • 华为OD机试 - 找终点(Java)

    题目描述 给定一个正整数数组 设为nums 最大为100个成员 求从第一个成员开始 正好走到数组最后一个成员 所使用的最少步骤数 要求 第一步必须从第一元素开始 且1 lt 第一步的步长
  • Java面向对象编程

    下列关于线程的说法错误的是 A 耗时的操作使用线程 提高程序响应 B 耗内存的操作使用线程 提高内存利用率 C 多CPU的系统使用线程 提高CPU利用率 D 并行操作使用线程 如c s架构中服务端程序为每个客户端请求创建一个线程来响应 答案
  • Linux下cppcheck静态检测工具

    1 cppcheck工具说明 cppcheck工具是一个C C 代码缺陷静态检查工具 它不仅可以检查代码中的语法错误 还可以检查出编译器检查不出来的缺陷 从而辅助提升代码质量 2 Linux下cppcheck工具安装 Linux终端输入 s
  • NIO之多路复用

    一 NIO简介 1 Java BIO 同步并阻塞 传统阻塞型 服务器实现模式为一个连接一个线程 即客户端有连接请求时服务器端就需要启动一个线程进行处理 如果这个线程不做任何事情就会造成不必要的开销 2 Java NIO 同步非阻塞 服务器实
  • js高阶函数

    高阶函数特点 1 函数的返回值是一个函数 2 函数的参数是一个函数 回调函数 高阶函数作用 1 将函数的参数预置 2 对函数进行功能扩展 高阶函数应用 闭包是基于高阶函数特性产生的 但高阶函数不一定就是闭包 Promise 函数柯里化 函数
  • react native中ScrollView嵌套TextInput安卓端有滑动问题

    react native中ScrollView嵌套TextInput安卓端有滑动问题 1 1 问题描述 react native中ScrollView嵌套TextInput TextInput组件设置了 textAligin right 后
  • Spring的BeanNameAware和BeanFactoryAware接口

    BeanNameAware 作用 让Bean获取自己在BeanFactory配置中的名字 根据情况是id或者name Spring自动调用 并且会在Spring自身完成Bean配置之后 且在调用任何Bean生命周期回调 初始化或者销毁 方法
  • Python装饰器学习(九步入门)

    原文链接 http www cnblogs com rhcad archive 2011 12 21 2295507 html 本文对原文略有改动 增加了自己的理解 装饰器其实也就是一个函数 一个用来包装函数的函数 返回一个修改之后的函数对
  • 【Python_Selenium学习笔记(三)】基于Selenium模块实现无界面模式 & 执行JS脚本(把滚动条拉到底部)

    基于Selenium模块实现无界面模式 执行JS脚本 把滚动条拉到底部 前言 此篇文章主要介绍如何使用 Selenium 模块实现 无界面模式 执行JS脚本 把滚动条拉到底部 并以具体的示例进行展示 正文 1 Selenium 设置无界面模
  • 【云原生之kubernetes实战】在k8s下部署Gitblit服务器

    云原生之kubernetes实战 在k8s下部署Gitblit服务器 一 Gitblit介绍 1 Gitblit简介 2 Gitblit特点 二 检查本地k8s环境 1 检查工作节点状态 2 检查系统pod状态 三 编辑gitblit ya
  • 树莓派4b: 初级使用(Ubuntu21.10,Windows11写入SSD,远程连接,软路由搭建,webmin安装,自建Dockerhub,远程管理, 百度云盘,阿里云盘同步等)

    虽然vps也便宜 但还是想买4b 树莓派4b显示器接线为 hdmini 买时没有附赠 所以以下均为mac系统下通过ssh操作 文章来自 http blog csdn net intbird 转载请说明出处 rasberrypi 4b 0 服
  • Java线程池execute()方法源码解析

    先看作者给出的注释来理解线程池到底有什么作用 Thread pools address two different problems they usually provide improved performance when execut
  • Git&GitHub简明使用

    主体内容来自B站UP主冯雨的视频教程 此为个人笔记分享 同时涉及对原视频的一些补充 原视频链接 语雀笔记链接 介绍 Git和GitHub是什么 Git是一个运行在电脑上的版本控制软件 GitHub是基于Git打造的网站 Git的三个概念 提