Git操作详解以及在VScode中的使用

2023-05-16

我们先理清Git和Github的区别,Git是个版本控制的工具,用来管理本地的代码工程,它可以记录代码内容的变更;而Github是一个代码托管平台,我们可以使用Git将本地代码上传到Github。

为什么要学Git,上面说到Git是一个版本控制工具,它可以记录代码内容的变更,方便我们对项目的管理,它主要有以下的用途:

  • 代码备份

    举一个简单的例子,写好一个程序后,想要再加一个新功能,添加这个新功能需要对很多个文件进行改动。但是添加完这个功能后发现,这个新功能是个坑,然后就会想着回退到上一个版本,这时候如果有备份还好,没有备份的话就得ctrl+z,甚至要按照自己的记忆恢复以前的版本

    如果使用Git就好办了,直接使用git切换下版本或者分支就可以了。

    当然先备份一下原始代码,然后在上面改,也是一个很简单且有效的方法,但是随着新功能的增加,程序所占用的内存越来越大,而且每个版本间的区别很难直观看出,这不利于我们对项目的管理

  • 多人协作

    假设要做一个项目,这个项目中有多个功能,大多数情况下,我们不可能一个功能一个功能地做,而是进行团队分工,多个功能同步进行,这时候如果没有使用Git进行版本控制,那么在将这些功能统合时将会出现很大的问题

  • 以后工作的需要

    目前很多公司都在用Git进行项目管理,学会Git对以后的工作还是很有好处的

本文将介绍Git的基本工作流程,以及这些流程对应的命令行指令,最后对VScode中内置的Git进行介绍和演示

Git安装

Git在Windows上和在Linux上的使用方式基本无差别,所以本文中的演示主要在Windows上进行

Windows

在这里可以下载最新版的Git,然后一路Next即可

Ubuntu

sudo apt-get install git

Git工作流程

基本工作流程图:

02-概念-02
  • 工作区(Workspace):平时存放项目代码的地方
  • 暂存区(Index/Stage):用于临时存放改动信息
  • 本地仓库(Repository):存放所有提交的版本数据
  • 远程仓库(Remote):托管代码的服务器,比如我们经常用的Github就是个代码托管平台

git的基本工作流程如下:

  1. 在工作区中添加、修改文件
  2. 将工作区中需要进行版本管理的文件放入暂存区
  3. 将暂存区的文件提交到git本地仓库
  4. (optional)将本地仓库推送到远程仓库

为了方便以后的学习和工作,不建议直接使用GUI来操作Git,下面将针对上面的工作流程介绍一些常用的Git命令行指令,这些指令是比较简单的,敲熟练之后再上手GUI版本的Git就相当容易了

初始化

初始化git,有两种方式:

# 方式一:本地生成一个git
git init
# 方式二:从远端克隆一个仓库
git clone https://gitee.com/xxxxxx/xx.git

基本配置

# 配置用户名
git config --global user.name "name"
# 配置邮箱
git config --global user.email "name@mail.com"

删除远程仓库

git remote rm origin

添加远程仓库

git remote add origin https://gitee.com/xxxxxx/xx.git

推送至远程仓库

将已修改文件添加至暂存区

git add dir/filename # 添加指定文件
git add . # 添加所有已修改文件

将暂存区的改动提交到本地的版本库,使用git commit命令我们就会在本地版本库生成一个40位的哈希值,用于版本回退

git commit -m "message" # message就是本次提交的简要说明

本地上传,注意在推送前需要先从远程拉取

git push -u origin master # master可以更换为其他分支

从远程仓库拉取

更新本地:

git pull origin master # master可以更换为其他分支

分支管理

分支管理是版本控制中一个很重要的内容,在Git中主要有切换/创建分支(checkout)、合并分支(merge)两个指令

下面是部分分支操作的指令和图示,圆圈○表示一个提交(commit)记录,矩形表示分支,它指向一个提交记录,由这个记录可以遍历之前所有的提交记录

首先初始化了一个git,这个git中只有一个master分支,包含两个commit记录

03-图示-01

现在我们创建一个新分支,命名为develop

git checkout -b develop # 表示创建并切换到develop分支
03-图示-02

此时master分支和develop分支都指向C1这个提交记录。我们分别在这两个分支上进行修改并提交:

git commit
git checkout master # 切换到master分支
git commit
03-图示-03

可以看到master分支和develop分支指向了不同的提交记录,接下来我们将develop分支合并到master分支中

git merge develop
03-图示-01

执行上面的指令后,产生了一个新的提交记录C4,由C4我们可以遍历之前所有的提交记录,但是此时master分支和develop分支仍然指向不同的提交记录。继续切换到develop分支,将master分支合并到develop分支中:

git checkout develop
git merge master
03-图示-01

打标签

使用Git可以给指定提交打上标签,用来突出显示这个提交,比如将提交标记为v1.0v2.0,等等

  • 列举标签

使用如下命令即可列出所有标签

git tag

当标签太多时,可以使用如下指令列出包含指定字符的标签

git tag -l "v1.*"
  • 创建标签

添加-a选项即可创建标签,如下:

git tag -a v1.0 -m "version 1.0"

如上命令即可为当前提交创建一个标签,标签名为v1.0-m选项后就是该标签的附注信息

  • 推送标签

只使用git push命令在默认情况下不会将标签推送到 远程仓库,在创建标签后需要执行如下命令将指定标签推送到远程仓库:

git push origin <tagname>

如果要推送多个新标签,可以使用git push--tags选项将所有标签推送到远程仓库:

git push origin --tags
  • 删除标签

使用git tag-d选项即可删掉本地仓库上的指定标签,如下:

git tag -d <tagname>

但是该指令不会删除远程仓库中的标签 ,还需要使用如下命令来更新远程仓库:

git push remote :refs/tags/<tagname>
  • 切换标签

使用git checkout <tagname>指令即可将git仓库的HEAD指针指向标签所在的提交,如下:

git checkout v1.0

VScode中的Git使用

本地仓库操作

当对仓库已经被跟踪的文件进行修改的时候,会有三种文件状态。如图:

01-vscode-图标说明-01
  • M(Modify),表示该文件存在修改
  • D(Delete),表示该文件被删除
  • U(Update),表示该文件是新添加的

选中文件即可查看已进行的修改

01-vscode-图标说明-03

接下来可以对这些更改进行处理,可以选择放弃修改或者保存修改,选择放弃修改的话,该文件就会回退到上次保存的版本

01-vscode-图标说明-02

也可以点击上面的图标对所有更改进行处理

01-vscode-图标说明-04

我们选择保存所有修改,所有已修改文件就会保存到暂存区,对应的git命令为git add .

接下来将暂存区的改动提交到本地的版本库,点击上方的“√”,对应git命令git commit,然后添加message即可

01-vscode-图标说明-05

这时候所有的修改就已经处理完毕了

01-vscode-图标说明-06

推送到远程仓库

将本地仓库上的修改推送到远程仓库,对应git命令git push

01-vscode-图标说明-08

一般情况下,VScode会弹出账号密码的输入窗口进行登录

最后查看远程仓库:

01-vscode-图标说明-09

从远程仓库拉取

与推送类似,如图,对应git命令git pull

01-vscode-图标说明-11

分支管理

VScode可以直接在左下角创建/切换分支

01-vscode-图标说明-10

合并分支

01-vscode-图标说明-12

如果待合并的分支上的修改和master没有冲突,就可以直接合并。但是在多人协作时常常会出现两个分支存在不同修改的情况,这时候就要对这些冲突进行处理:

01-vscode-图标说明-13

GitLens插件

使用VScode自带的git支持对于个人开发来说已经足够了,但是在应对团队协作时的文件冲突时还略显不足,这时候我们可以借助VScode中的GitLens插件,使用方法详见git源代码管理插件GitLens

参考

Git 分支管理最佳实践

Git教程

VScode 结合git的全面使用流程,再也不用记住git的命令了!

https://oschina.gitee.io/learn-git-branching/

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

Git操作详解以及在VScode中的使用 的相关文章

  • git push origin 分支名总是推送到 master

    我搜索了一下 但似乎找不到答案 在我可以访问的两个盒子上 当我执行 git push dry run origin mytestbranch 时 我得到以下结果 To email protected cdn cgi l email prot
  • emacs 临时文件的 .gitignore 正则表达式

    我正在尝试 gitignore emacs 临时 自动保存文件 我在用着 在我的 gitignore 中 But git add A在子文件夹中运行仍然给我 new file make collections py new file nor
  • 如何列出 Git 1.7+ 中的所有远程分支?

    我试过了git branch r 但这仅列出我在本地跟踪的远程分支 如何找到我没有的列表 命令是否列出对我来说并不重要all远程分支或仅那些未跟踪的分支 For the vast majority 1 of visitors here th
  • Git 拉回 master 中的提交?

    一位同事 我们称之为亚伦 被指派翻新网站的一部分作为长期项目 他创建了一个新的 Git 分支 名为aaron 他所有的改变都是在这个分支上进行的 当他工作时 我继续维护整个网站 将我的更改提交给master 最终 Aaron 将他的分支合并
  • GIT 中的重复合并。它如何计算差异?

    我一直在做一项研究 试图了解 GIT 合并是如何工作的 我知道有几种合并类型 如递归 章鱼等 我发现解析 递归是最常用的 并且递归合并仅在存在多个共同祖先 基础时才有用 但是 我找不到从分支重复合并到主节点时使用哪种算法 或者如何计算祖先
  • 从分离的头进行 Git 推送

    我以超然的态度做出了一些改变 我想用 Git 将这些更改推送到这个独立的头 我不希望我的更改进入开发分支 当然也不想进入主分支 我正在与另一个人一起处理一个文件 分支示例 develop master HEAD detached at or
  • 有没有办法列出Git中未修改的文件?

    我从另一个来源以 tarball 的形式获取了一些更改 我想知道哪些文件没有更改 目标是 Git 克隆 因此可以轻松查看新增内容和更改内容 有人知道如何获取未更改内容的列表 不包括未跟踪的内容 吗 编辑 换句话说 我希望利用 Git 来查找
  • 如何预览 Git 中的隐藏内容?

    我想检查一个存储 并找出如果我将其应用于当前状态的工作树 它会发生什么变化 我知道我可以对存储进行 git diff 但这向我展示了工作树和存储之间的所有差异 而我只是想知道存储应用将改变什么 git stash show将向您显示最近存储
  • 克隆存储库而不将其设为原始远程存储库

    我正在从一台将被擦除的计算机上克隆一个 git 存储库 是否可以在不创建原始存储库的情况下克隆存储库origin master 或者我是否需要克隆它 然后删除远程分支 这是通过git remote rm origin Edit 存储库只有一
  • 如何重命名 GitHub 网站上的目录/文件夹?

    我在 GitHub 网站上找到了一种方法rename https github com blog 1436 moving and renaming files on github一个文件并成功完成 我也找到了一种方法rename https
  • Gerrit 安装后无法克隆所有项目存储库

    我有一个新设置的 Gerrit 实例 目前只有两个存储库 所有项目 binutils 测试 尝试克隆所有项目时 我收到以下错误 git clone ssh user hostname 29418 All Projects Initializ
  • GitHub API:标记提交所属(与 git describe --tag 并行)

    我正在使用 GitHub API 进行实验octokit https github com octokit octokit rb红宝石 我的目标是能够提取提交 SHA 所属的 标签 现在我可以使用命令行轻松地执行此操作 gt git des
  • 节点项目的 Azure git 部署失败

    我正在尝试将我的项目部署到azure 它正在失败 这些是我采取的步骤 git init git config core longpaths true git add git commit m initial commit 所有这些都有效 我
  • `git rm --cached` 和 `git update-index --assume-unchanged` 之间的区别?

    我不明白之间的区别git rm cached and git update index assume unchanged 我知道git rm cached
  • Windows 版 GitKraken 中的文件名太长

    正如建议的Q22575737 https stackoverflow com a 22575737 6623589 我已经更新了我的注册表并设置了git config system core longpaths true在处理长路径时 问题
  • vscode通过SSH连接gitlab的问题

    我在尝试通过 SSH 连接到 GitLab 远程存储库时遇到问题 这里是迄今为止完成的步骤 成功生成 SSH 密钥 管理人员将密钥添加到存储库中 因此当我访问 GitLab 网站时 我可以提交和发布分支 我无法从 VSCODE 发布分支并收
  • Git:如何变基到特定提交?

    我想变基到特定的提交 而不是另一个分支的 HEAD A B C master D topic to A B C master D topic 代替 A B C master D topic 我怎样才能做到这一点 您可以通过在您喜欢的提交上创
  • Jenkins git 插件 - 有时太慢

    以下内容摘自 Jenkins 日志 00 00 03 135 gt git fetch tags progress email protected cdn cgi l email protection some org some repo
  • git diff 在尖括号中显示 unicode 符号

    我有一个带有 unicode 符号 俄语文本 的文件 当我修复一些拼写错误时 我使用git diff color words 看看我所做的改变 如果是 unicode 西里尔文 符号 尖括号会造成一些混乱 如下所示 cat p1 cat p
  • 如何从 android.googlesource.com 或 github.com 下载单个目录?

    我想下载 https android googlesource com platform frameworks base git master tools aapt https android googlesource com platfo

随机推荐

  • 深度估计berHu损失函数和语义分割带权值交叉熵损失函数

    深度估计berHu损失函数和语义分割带权值交叉熵损失函数 最近在做联合深度估计和语义分割的深度学习算法 xff0c 深度估计默认使用的是L1 loss xff0c 语义分割使用的是普通的交叉熵损失函数 xff0c 继续改进模型对于指标的提升
  • 游览器是如何工作的

    游览器是如何工作的 浏览器的主要功能浏览器的主要构成一次网络请求浏览器发生了什么 xff1a 如果请求使用了HTTPS那么流程会有什么不同 xff1f 总结 浏览器的主要功能 浏览器的主要功能是将用户选择得web资源呈现出来 xff0c 它
  • OSG QT 完整附加依赖项(.lib)

    OSG QT 完整附加依赖项 lib 可在VS等需要添加附加依赖项的环境使用 注 xff1a OSG版本 xff1a 3 6 4 xff1b QT版本 xff1a 5 9 8 带d的为debug xff0c 不带d的release省掉了Qt
  • Ubuntu登陆账户后自动运行VNCserver

    问题 xff1a 远程桌面时 xff0c 如果重启远程Ubuntu xff0c 则VNC会话失效 解决 xff1a 一个解决的方法就是用putty将重启的Ubuntu登陆入账户后 xff0c 再开启VNC会话 为了方便 xff0c 可以设置
  • RAP与RARP原理

    ARP与RARP都属于网络层协议 xff0c 但是他们是为了解决链路层的帧转发问题 xff0c ARP的功能是将IP解析成MAC地址 xff0c 而RARP则相反 ARP 地址解析协议 xff08 Address Resolution Pr
  • eyeshot官方样例说明

    Eyeshot 12 例子 1 wings拖动按钮改变机翼的尺寸参数 xff0c 并导出到step文件 2 snaptogrid鼠标画平面 xff0c 类似于CATIA的多段线功能 3 sceneeditor控制灯光点和变换位置 xff0c
  • Python爬虫实现获取股票信息并保存到文件(亲测可运行)

    主要参考了北京理工大学嵩天老师的视频 xff0c 因老师所讲的网址已做更改 xff0c 将获取股票列表信息和股票价格的网站做了更改 xff0c 用到了beautiful soup库 xff0c re库 xff0c requests库 xff
  • 为什么要内存对齐?

    CPU访问非对齐的内存时为何需要多次读取再拼接 xff1f 首先简单说一下何为内存对齐 例如 xff0c 当cpu需要取4个连续的字节时 xff0c 若内存起始位置的地址可以被4整除 xff0c 那么我们称其对齐访问 反之 xff0c 则为
  • 读AQS源码-关于shouldParkAfterFailedAcquire函数的返回值

    先上源码 final boolean acquireQueued final Node node int arg boolean failed 61 true try boolean interrupted 61 false for fin
  • 读AQS源码-关于同步队列与锁的公平性

    先上部分源码 xff1a public final void acquire span class token punctuation span int arg span class token punctuation span span
  • FreeRTOS 正点原子教程学习笔记

    正点原子视频教程 FreeRTOS 教程非常详细 xff09 小知识 如果创建了任务却完全空着 xff0c 没有while xff08 1 xff09 延时 的话 xff0c 整个程序会卡住 xff0c 其他正常的任务无法运行 如果任务里单
  • 数据分析之Matplotlib(一)简介

    Matplotlib简介 Matplotlib是一个Python 2D绘图库 xff0c 可以生成各种硬拷贝格式和跨平台的交互式环境的出版物质量数据 Matplotlib可用于Python脚本 xff0c Python和IPython sh
  • 【2018-AAAI】Spatial As Deep: Spatial CNN for Traffic Scene Understanding

    概述 提出了SCNN语义分割网络 xff0c 将传统的深度逐层卷积推广到特征图中的逐片卷积 xff0c 在同一特征图的行和列上做信息传递 xff0c 可有效识别强先验结构的目标 此外论文还发布了一个大型的车道线检测数据集CULane Dat
  • 安装Code Blocks时出现can‘t find compiler的解决方法

    安装Code Blocks时出现can t find compiler的解决方法 1 首先我们要下载Code Blocks xff0c 我们可以去官方网站下载https www codeblocks org xff0c 或者直接点击该链接跳
  • OSPF网路拓扑结构(rfc2328)

    OSPF网路拓扑结构 xff08 rfc2328 xff09 OSPF rfc文档 xff08 rfc2328 xff09 中的拓扑结构对理解OSPF分区 区域内路由 区域边界路由 自治系统边界路由等基本概念很有帮助 并且整个文档打大部分内
  • Win10下使用WinSCP+PuTTY实现远程文件操作和终端访问

    Win10下使用WinSCP 43 PuTTY实现远程文件操作和终端访问 0 软件安装 安装WinSCP xff0c 参考官网安装PuTTY xff0c 从这个页面下载 1 WinSCP使用技巧 1 1 连接到远程主机 如下图所示 xff0
  • KVM创建的虚拟机创建快照、查看以及恢复

    KVM虚拟机要使用快照功能 xff0c 磁盘格式必须为qcw2如果不满足qcw2 xff0c 可以参考下面的链接进行修改 xff1a https www jianshu com p f6cc295a2108 创建快照方法 xff1a 创建快
  • KTT条件

    以下都是个人理解 xff0c 刚刚有点理解 xff0c 所以可能表达不清楚 但是又想把一些理解表达出来 xff0c 故写了这篇 上篇文章说了 xff0c 拉格朗日乘子法 xff0c 可以在等式约数的条件下 xff0c 求得某函数f的极大或极
  • github.com 拒绝了我们的连接请求。

    github com 拒绝了我们的连接请求 1 解决方法 1 解决方法 打开Dns检测 Dns查询 站长工具 在检测输入栏中输入GitHub官网 把检测列表里某个IP xff08 我选择最大的IP试了可以 xff09 输入到hosts里 x
  • Git操作详解以及在VScode中的使用

    我们先理清Git和Github的区别 xff0c Git是个版本控制的工具 xff0c 用来管理本地的代码工程 xff0c 它可以记录代码内容的变更 xff1b 而Github是一个代码托管平台 xff0c 我们可以使用Git将本地代码上传