Git教程

文章目录

  • Git分布式版本控制工具
    • 版本控制器的方式
    • 常用命令
    • 远程仓库
    • Tip

Git分布式版本控制工具

​ Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。

​ Git是分布式的,Git不需要有中心服务器,我们每台电脑拥有的东西都是一样的。我们使用Git并且有个中心服务器,仅仅是为了方便交换大家的修改,但是这个服务器的地位和我们每个人的PC是一样的。我们可以把这个服务器当作一个开发者的PC就可以,就是为了大家代码容易交流不关机用的。没有这个服务器大家一样可以工作,只不过“交换“修改不方便而已。
在这里插入图片描述

版本控制器的方式

集中式版本控制工具

​ 集中式版本控制工具,版本库是集中存放在中央服务器的,team里每个人work时从中央服务器下载代码,是必须联网才能工作,局域网或互联网。个人修改后提交到中央版本库。如:SVN、CVS
在这里插入图片描述

分布式版本控制工具

​ 分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样工作的时候,无需要联网了,因为版本库就在你自己的电脑上。多人协作只需要各自的修改推送给对方,就能互相看到对方的修改了。如:Git

常用命令

Git工作流程
在这里插入图片描述

  • clone:从远程仓库中克隆代码到本地仓库

  • checkout:从本地仓库中检出一个仓库分支然后进行修改

  • add:在提交前先将代码提交到暂存区

  • commit:提交到本地仓库,本地仓库中保存修改的各个历史版本

  • fetch:从远程库抓取到本地仓库,不进行任何的合并动作

  • pull:从远程库拉到本地库,自动进行合并(merge),然后放到工作区,相当于fetch+merge

  • push:将代码推送到远程仓库

  • git config:配置信息

    # 设置用户信息
    git config --global user.name "userName"
    git config --global user.email "Email"# 查看配置信息
    git config --global user.name
    git config --global user.email
    
  • alias:配置命令别名,在~/.bashrc中添加配置,修改完成后需要执行source ~/.bashrc

    # 部分windows系统不允许用户创建.开头的文件,可以在gitBash中执行
    touch ~/.bashrc# 在~/.bashrc中添加内容,输出git提交日志
    alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
    
  • git init:初始化当前目录为一个git仓库,执行成功后会多个.git文件夹

  • git status:查看修改状态(暂存区、工作区)
    在这里插入图片描述

  • git add:添加工作区一个或多个文件的修改到暂存区

    git add 单个文件名 | 通配符# 将所有修改加入到暂存区
    git add .
    
  • git commit:提交暂存区内容到本地仓库的当前分支,git commit -m '注释内容'

  • git log:查看提交日志,配置别名git-log

    git log [option]--all 显式所有分支--pretty=oneline 将提交信息显示为一行--abbrev-commit 使得输出的commitId更简短--graph 以图的形式显示
    
  • git reset:版本回退

    # 查看已经删除的记录,可以看到已经删除的提交记录
    git reflog# 版本切换,commitId可以通过git log查看
    git reset --hard commitId
    
  • git branch:查看本地分支,使用分支意味着可以把工作从开发主线上分离开来进行Bug修复和开发新功能,以免影响主线

    • master(生产)分支:线上分支,主分支,中小规模项目作为线上运行的应用对应的分支

    • develop(开发)分支:是从master创建的分支,一般作为开发部分的主要开发分支,如果没有其它并行开发不同期上线要求,都可以在此版本进行开发,阶段开发完成后,需要合并到master分支,准备上线

    • feature/xxx分支:从develop创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上研究任务完成后合并到develop分支

    • hotfix/xxx分支:从master派生的分支,一般作为线上bug修复使用,修复完成后需要合并到master、test、develop分支

    • test(测试)分支

    • pre(预上线)分支
      在这里插入图片描述

    # 查看本地分支
    git branch# 创建本地分支
    git branch 分支名# 切换分支
    git checkout 分支名# 切换到一个不存在的分支,创建并切换
    git checkout -b 分支名# 合并分支,一个分支上的提交可以合并到另一个分支
    git merge 分支名# 删除分支,不能删除当前分支,只能删除其它分支
    # 删除时需要做各种检查
    git branch -d 分支名
    # 强制删除,不做任何检查
    git branch -D 分支名
    
  • 冲突解决:当两个分支上对文件的修改可能会存在冲突,如同时修改了同一文件的同一行,需要手动解决冲突,步骤如下:

    1. 处理文件中冲突的地方
    2. 将解决完冲突的文件加入暂存区(add)
    3. 提交到仓库(commit)

远程仓库

  • git remote add:添加远程仓库,此操作是先初始化本地库,然后与已创建的远程库进行对接

    git remote add <远端名称> <仓库路径>远端名称:默认是origin,取决于远程服务器设置仓库路径:从远端服务器获取此URL
    git remote add origin git@gitee.com:lshibo/local-git-store.git
    
  • git remote:查看远程仓库

  • git push:推送到远程仓库库

    git push [-f] [--set-upstream] [远端名称 [本地分支名][:远端分支名]]-f 强制覆盖--set-upstream 推送到远端的同时并且建立起和远端分支的关联关系# 如果远端分支名=本地分支名,则可以只写本地分支
    git push origin master# 如果当前分支已经和远端分支关联,则可以省略分支名和远端名
    # 将master分支推送到已关联的远端分支
    git push
    
  • git branch -vv:查看本地分支与远程分支的关联关系

  • git clone:clone远端仓库到本地

    git clone <仓库路径> [本地目录]本地目录可以省略,会自动生成一个目录
    
  • git fetch [remote name] [branch name]:将仓库里的更新都抓取到本地,不会进行合并。如果不指定远端名称和分支名,则抓取所有分支

  • git pull [remote name] [branch name]:拉取指令就是将远端仓库的修改拉到本地并自动进行合并,等同于fetch+merge。如果不指定远端名称和分支名,则抓取所有并更新当前分支。

  • 解决合并冲突:先拉去远程仓库,经过合并后才能推送到远端分支
    在这里插入图片描述

Tip

  • GitBash乱码问题

    1. 打开GitBash执行git config --global core.quotepath false命令
    2. ${git_home}/etc/bash.bashrc文件最后添加
      export LANG="zh_CN.UTF-8"
      export LC_ALL="zh_CN.UTF-8"
      
  • 添加文件到忽略列表:在工作目录创建.gitignore文件(文件名称固定),列出要忽略的文件模式

    # no .a files
    *.a
    # but do track lib.a, even though you're ignoring .a files above
    !lib.a
    # only ignore the TODO file in the current directory, not subdir/TODO
    /TODO
    # ignore all files in the build/ directory
    build/
    # ignore doc/notes.txt, but not doc/server/arch.txt
    doc/*.txt
    # ignore all .pdf files in the doc/ directory
    doc/**/*.pdf
    

参考:黑马

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

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

相关文章

【感谢告知】本账号内容调整,聚焦于Google账号和产品的使用经验和问题案例分析

亲爱的各位朋友&#xff1a; 感谢您对本账号的关注和支持&#xff01; 基于对朋友们需求的分析和个人兴趣的转变&#xff0c;该账号从今天将对内容做一些调整&#xff0c;有原来的内容改为Google&#xff08;谷歌&#xff09;账号和产品的使用经验&#xff0c;以及相关问题的…

24西安电子科技大学经济与管理学院—考研录取情况

24西安电子科技大学—经理与管理学院—考研录取统计 01、经理与管理学院各个方向 02、24经济与管理近三年复试分数线对比 1、经管院24年院线相对于23年院线普遍下降2-15分&#xff0c;个别专业上涨4-10分。 2、经管院应用经济学2024年院线350分&#xff1b;管理科学与工程院线…

java join与yield方法

join() join() 方法的主要作用是使当前线程&#xff08;调用 join() 方法的线程&#xff09;等待目标线程完成执行。当目标线程执行完毕后&#xff0c;当前线程才会继续执行。 代码示例&#xff1a; public class JoinExample {public static void main(String[] args) {Thr…

保研复习 | 数据结构

目录 CH1 绪论☆ 数据项、数据元素、数据结构☆ 逻辑结构和存储结构的区别☆ 顺序存储结构和链式存储结构的比较☆ 算法的重要特性☆ 算法的复杂度 CH2 线性表☆ 单链表 CH3 栈、队列和数组☆ 栈和堆是什么&#xff1f;☆ 栈在括号匹配中的应用☆ 栈在表达式求值中的应用☆ …

Linux|信号

Linux|信号 信号的概念信号处理的三种方式捕捉信号的System Call -- signal 1.产生信号的5种方式2.信号的保存2.1 core 标志位 2.信号的保存2.1 对pending 表 和 block 表操作2.2 阻塞SIGINT信号 并打印pending表例子 捕捉信号sigaction 函数验证当前正在处理某信号&#xff0c…

数据库SQL Server常用字符串函数

文章目录 字符串函数 字符串函数 CONCAT:拼接字符串 CONCAT(COLUMN1,_,COLUMN2) AS COLCONVERT&#xff1a;转换数据类型 CONVERT(data_type(length),data_to_be_converted,style)例如&#xff1a;CONVERT(VARCHAR(10),GETDATE(),110) SUBSTRING()&#xff1a;从字符串中返回…

java项目总结5

1.单列集合顶层接口Collction 集合体系结构 注意&#xff1a;因为Collection定义的方法是共性的&#xff0c;使用不能通过搜引来删除&#xff0c;只能通过元素的对象进行删除&#xff0c;返回值是boolean类型。例如我添加了"aaa"进List集合&#xff0c;删除则要对象…

STM32-01 推挽输出-点亮LED

本文以STM32中点亮LED为例&#xff0c;解读推挽输出的原理 推挽输出介绍 所谓的推挽输出&#xff0c;就是通过控制输出控制模块&#xff0c;打开或者关闭P-MOS或者N-MOS。 ─ 推挽模式下&#xff1a;输出寄存器上的’0’激活N-MOS&#xff0c;而输出寄存器上的’1’将激活P-M…

局部静态变量实现的单例存在多个对象

文章目录 背景测试代码运行测试尝试打开编译器优化进一步分析 背景 业务中出现日志打印失效&#xff0c;发现是因为管理日志对象的单例在运行过程中存在了多例的情况。下面通过还原业务场景来分析该问题。 测试代码 /* A.h */ #ifndef CALSS_A #define CALSS_A#include <…

打造属于自己的脚手架工具并发布到npm仓库

一、创建项目 使用 npm init -y 创建项目创建项目入口文件 index.js在 package.json 中添加 bin 字段使用 npm link 命令将文件映射至全局&#xff0c;使可以在本地测试 zp 命令 // "zp" 为用于全局执行脚手架的命令&#xff0c;vue-cli中使用的是vue命令 "bi…

基于java+springboot+vue实现的旅游管理系统(文末源码+lw+ppt)23-402

研究的内容 当下流行的WPS、Word等办公软件成为了人们耳熟能详的系统&#xff0c;但一些更加专业性、性能更加强大的网络信息工具被人们“埋没”在互联网的大海中。甘肃旅游管理系统是一个便于用户查看热门景点、酒店信息、推荐线路、旅游攻略、景点资讯等&#xff0c;管理员进…

【Python基础篇】你了解python中运算符吗

文章目录 1. 算数运算符1.1 //整除1.2 %取模1.3 **幂 2. 赋值运算符3. 位运算符3.1 &&#xff08;按位与&#xff09;3.2 |&#xff08;按位或&#xff09;3.3 ^&#xff08;按位异或&#xff09;3.4 ~&#xff08;按位取反&#xff09;3.5 <<&#xff08;左移&#…

HTML 【实用教程】(2024最新版)

核心思想 —— 语义化 【面试题】如何理解 HTML 语义化 ?仅通过标签便能判断内容的类型&#xff0c;特别是区分标题、段落、图片和表格 增加代码可读性&#xff0c;让人更容易读懂对SEO更加友好&#xff0c;让搜索引擎更容易读懂 html 文件的基本结构 html 文件的文件后缀为 …

【高录用、快检索、过往5届均已检索、SPIE 出版】第六届无线通信与智能电网国际会议(ICWCSG 2024)

随着科技的飞速发展和能源需求的日益增长&#xff0c;智能电网技术逐渐成为电力行业的重要发展方向。与此同时&#xff0c;无线通信技术在近年来也取得了显著的进步&#xff0c;为智能电网的发展提供了强有力的支持。为了进一步推动无线通信与智能电网的结合与发展&#xff0c;…

学IT上培训班真的有用吗?

在学习IT技术的过程中&#xff0c;你是否也被安利过各种五花八门的技术培训班&#xff1f;这些培训班都是怎样向你宣传的&#xff0c;你又对此抱有着怎样的态度呢&#xff1f;在培训班里学技术&#xff0c;真的有用吗&#xff1f; 一、引入话题 IT行业是一个快速发展和不断变化…

C++初学者指南-4.诊断---未定义行为检测器

C初学者指南-4.诊断—未定义行为检测器 未定义行为检测器(UBSAN) 适用编译器&#xff1a;clang,g在运行时检测许多类型的未定义行为 解引用空指针从未对齐的指针读取整数溢出被0除 … 在代码中加入额外的指令:在调试构建中增加运行时约25% 示例&#xff1a;有符号整形溢出 …

Git在多人开发中的常见用例

前言 作为从一个 svn 转过来的 git 前端开发&#xff0c;在经历过git的各种便捷好处后&#xff0c;想起当时懵懂使用git的胆颤心惊&#xff1a;总是害怕用错指令&#xff0c;又或者遇到报错就慌的场景&#xff0c;想起当时查资料一看git指令这么多&#xff0c;看的头晕眼花&am…

深度学习原理与Pytorch实战

深度学习原理与Pytorch实战 第2版 强化学习人工智能神经网络书籍 python动手学深度学习框架书 TransformerBERT图神经网络&#xff1a; 技术讲解 编辑推荐 1.基于PyTorch新版本&#xff0c;涵盖深度学习基础知识和前沿技术&#xff0c;由浅入深&#xff0c;通俗易懂&#xf…

家里老人能操作的电视直播软件,目前能用的免费看直播的电视软件app,适合电视和手机使用!

2024年许多能看电视直播的软件都不能用了&#xff0c;家里的老人也不会手机投屏&#xff0c;平时什么娱乐都没有了&#xff0c;这真的太不方便了。 很多老人并不喜欢去买一个广电的机顶盒&#xff0c;或者花钱拉有线电视。 现在的电视大多数都是智能电视&#xff0c;所以许多电…

Redis基本命令源码解析-字符串命令

1. set 用于将kv设置到数据库中 2. mset 批量设置kv mset (msetnx) key1 value1 key2 value2 ... mset:msetCommand msetnx:msetnxCommand msetCommand和msetnxCommand都调用msetGenericCommand 2.1 msetGenericCommand 如果参数个数为偶数,则响应参数错误并返回 如果…