Git使用手册

git clone --recursive递归下载github出现443子模块无权限下载的解决方法 当你发现用git clone下载的代码里面有文件 .gitmodules 的时候,说明里面还包含了子git库 就需要递归下载 例如执行了下面指令以后 git clone git地址 下载好以后,打开里面的文件.gitmodules 会看到文件有如下格式的子模块 submodule 代表子模名字 path代表存储文件夹位置 url代表git库下载地址 [submodule "vendor/dm.pl"] path = vendor/dm.pl url = https://github.com/the 阅读详情

Git分为本地分支和远程分支,是一个分布式的版本管理系统,相对于svn的集中式管理,更加优越。

Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

Git 与 SVN 区别

GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。

如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应GIT提供的一些概念和特征。

Git 与 SVN 区别点:

1、GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。

2、GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。

3、GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。

4、GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。

5、GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

Git可以以http方式拉取代码,也可以用ssh方式,后者可以用ssh key免密码登录。

1. 常用命令

git clone		拷贝代码
git status		当前代码状态
git log			提交历史
git add			文件加入git
git commit -a -m "comments"		代码提交并评论
git push		代码提交到远程分支
git pull			从远程分支拉取最新代码
git fetch		FETCH_HEAD指的是: 某个branch在服务器上的最新状态
git branch xxx		创建某个分支
git checkout xxx	切换到某个分支
git checkout xxx.cpp	未提交状态下恢复文件,即revert
git merge master	合并当前分支到master

如果有submodule,clone代码时注意在地址后加“–recursive”,如:

git clone ssh://git@gitlab.zhb.domain:10022/zhb/zhb.git --recursive

在tortoiseGit上运行:

git submodule update

2. 回退到某个版本

先显示提交的log

$ git log
commit 4dc08bb8996a6ee02f
Author: Mark <xxx@xx.com>
Date:   Wed Sep 7 08:08:53 2016 +0800

commit 9cac9ba76574da2167
Author: xxx<xx@qq.com>
Date:   Tue Sep 6 22:18:59 2016 +0800

回退到某个commit版本:

git reset --hard e377f60e28c8b84158

如果不加–hard,仅改变暂存区,并不改变工作区,这意味着在无任何其他操作的情况下,工作区中的实际文件同该命令运行之前无任何变化。即代码保留,回到 git add 之前。这通常在合并多个commit时使用。

如果加了–hard,就会完全回退到那个版本,不会保留修改的代码。

这个功能也可以实现强制把本地代码恢复成远程分支一样的,即恢复到远程分支的最新commit id。

强制提交:

git push -f origin master

3.分支操作

(1)删除分支
删除本地分支

git branch -D br

删除远程分支

git push origin :br  (origin 后面有空格)

(2)新建分支
新建并切换到本地dev分支

git checkout -b dev 

本地分支与远程分支相关联

git pull origin dev

在本地新建分支并推送到远程

git checkout -b test
git push origin test

这样远程仓库中也就创建了一个test分支

4.修改全局用户名和email

git config --global user.name "张三"
git config --global user.email "zhangsan@126.com"

5.子模块介绍

使用场景
当项目越来越庞大之后,不可避免的要拆分成多个子模块,我们希望各个子模块有独立的版本管理,并且由专门的人去维护,这时候我们就要用到git的submodule功能。
常用命令

git clone <repository> --recursive 递归的方式克隆整个项目
git submodule add <repository> <path> 添加子模块
git submodule init 初始化子模块
git submodule update 更新子模块
git submodule foreach git pull 拉取所有子模块

submodule如果更新错误,想要恢复原来的commit,用以下语句:

进入项目的目录,无需进submodule的目录
回退的commit必须是在对应的分支上
git submodule foreach git checkout 9b48ad26026b882d780ac94c9629cca467121ddd
如果是要恢复到某个分支,就在checkout后换成分支名

如果报错:fatal: reference is not a tree:
说明,submodule没有被更新。执行:git submodule update --init,将submodule更新到最新。

6.用界面ToriostGit更新主repo上submodule的commit id

1.在自己的分支上,进入submodule目录,git checkout master
2.git pull & git fetch
3.退出submodule目录,git commit,git push
4.merge到master分支

7. 合并冲突

产生原因:
有两个开发分支:zhb1,zhb2。两个分支都会对同一个文件做修改,这样在顺序提交合并到master分支时,就会产生冲突。

需要注意的是,只有对同一文件的同一行修改时,才需要手动解决冲突,如果修改的是不同行,git merge时,会自动处理。下面我们讨论的是对同一文件的同一行修改时产生的冲突。

有一文件:confict.txt
master分支上的内容是:

DECLARE_string(zhb1);
DECLARE_string(zhb2);

zhb1分支上新增一行,并修改第一行,内容变为:

DECLARE_string(zhb1==);
DECLARE_string(zhb2);
DECLARE_string(zhb3);

Commit,push到zhb1远程分支。

zhb2分支上删除第二行,并新增两行(新增的内容与zhb1分支不相同),内容变为:

DECLARE_string(zhb1);
DECLARE_string(zhb3==);
DECLARE_string(zhb4);

Commit,push到zhb2远程分支。

先把zhb1分支合并到master,并push,没问题。
再把zhb2分支合并到master,就会出现冲突:
在这里插入图片描述
提示自动合并失败,查看状态,出现both modified: confict.txt字样,表明该文件合并冲突了。
在这里插入图片描述
如果是在windows下的TortoiseGit工具查看该文件状态,文件会出现一个惊叹号:
在这里插入图片描述
这时,打开文件内容如下:

<<<<<<< HEAD
DECLARE_string(zhb1==);
DECLARE_string(zhb2);
DECLARE_string(zhb3);
=======
DECLARE_string(zhb1);
DECLARE_string(zhb3==);
DECLARE_string(zhb4);
>>>>>>> zhb2

<<<<<<<,=,>>>>>>>这三个标记是冲突的格式,
<<<<<<<到
=是在当前分支合并之前的文件内容
=======到>>>>>>> zhb2是在其它分支下修改的内容

我们要做的是需要在这个两个版本中选择一个,然后把标记符号也要一起删除。

TortoiseGit提供了一个可视化的工具来编辑冲突。
在这里插入图片描述
修改编辑区,在下方的方框中编辑最终保留代码,保存标记冲突解决:
在这里插入图片描述
上面解决冲突的方式是,只保留以下两行,其他都删掉(注意行号前面的+、-号):

DECLARE_string(zhb3);
DECLARE_string(zhb4);

解决完冲突后,commit并push,整个流程结束。

8. 解决non-fast-forward冲突

git提交被拒绝,提示(non-fast-forward);
解决方法:

1. git fetch origin debug 
获取远程分支debug的修改 
2. git merge origin debug 
合并远程分支debug 
3. git pull origin debug 
更新本地分支 

这个时候提示文件有冲突,手动解决以下就可以了。

10. 合并多个commit

场景:多次commit合并为一个commit。
先reset到最老的一个commit id

git reset old_commit_id

注意:不能加–hard,加hard就直接回退了,不会保留文件修改了。

然后git status,查看修改的内容是否正确
接着git commit -m “combine commit id”
最后git push origin branch --force。
需要强制push代码。

11.自己的分支合并master代码

更新本地master代码:
checkout master, git pull
切回自己的分支,合并master代码:
checkout mybranch ,git merge from master
将本地代码同步到远程分支:
sync push origin mybranch

12.cherry-pick命令

git cherry-pick可以理解为”挑拣”提交,它会获取某一个分支的单笔提交,并作为一个新的提交引入到你当前分支上。
当我们需要在本地合入其他分支的提交时,如果我们不想对整个分支进行合并,而是只想将某一次提交合入到本地当前分支上,那么就要使用git cherry-pick了。用法:

git checkout mybranch
git cherry-pick 2dcdccd

意思是把commit id为2dcdccd的提交合并到mybranch分支上。

13. 还原某个特定的文件到之前的版本

第一步: 在命令行中输入 git log src/main/main.c 得到该文件的commit 历史。
第二步: 复制需要回退版本的hash,在此假设我们回退到 d98a0f565804ba639ba46d6e4295d4f787ff2949 ,则复制该序列即可
第三步:checkout 对应版本。格式为 git checkout , 在此即为命令行中输入

git checkout d98a0f565804ba639ba46d6e4295d4f787ff2949 src/main/main.c

第四步: commit checkout下来的版本。 如: git commit -m “revert to previous version”

14.rebase master

rebase和merge的区别:

1. merge命令不会保留merge的分支的commit,直接合并两条线上的commit。
2. rebase会保留所有的commit,将所有的commit合成一条线。

合并两个分支,除了merge,还可以用rebase。
步骤:

  1. git fetch 拉取远程代码。
  2. 将需要rebase的分支所有的commit合并为1个,参考第10条(这一步很重要,不然后面rebase解决冲突很艰难)
  3. 命令:git rebase origin/master(rebase的是远程master代码)
  4. 看下git status,解决冲突,解决好后,用git add命令,将该冲突文件resolve。
  5. 命令:git rebase --continue
  6. rebase完成,push代码至远程分支,要强制push。

15. 撤销当前分支所有修改,恢复到最近一次修改前干净的分支

git reset撤销当前分支所有修改,恢复到最近一次修改前干净的分支情况:

git reset --hard
git clean -fd

16. git压缩

Git 压缩。基本思想是将多个连续提交合并为一个。
主要目的是将许多提交压缩为几个相关的提交。因此,这样做会使 git 历史看起来简洁明了。
有两种方法可以实现 Git 压缩:

git merge -squash 在合并时使用 -squash 选项
git rebase -i 作为用于压缩提交的交互式工具
解决git --recursive克隆失败:分步克隆与镜像源优化策略 针对git clone --recursive克隆大型项目时因网络问题频繁失败的情况,本文提供了分步克隆与镜像源优化两大核心策略。通过先克隆主仓库、修改子模块源地址为国内镜像、再逐步初始化更新的方法,有效提升克隆成功率和速度,避免因单个子模块失败导致整个操作重来的困扰。 阅读详情

相关推荐

解决git --recursive克隆失败:分步策略与镜像源优化

本文针对 `git clone --recursive` 克隆大型项目时因网络原因导致的失败问题,提供了分步解决策略。核心方法是先克隆主仓库,再通过修改 `.gitmodules` 文件中的子模块地址为国内镜像源,最后分步初始化与更新子模块,从而有效规避网络波动,提升克隆成功率。

web99的专栏 471

Git:git clone之recursive选项

子模块可以让你在主仓库中保留一个指向外部仓库的引用,而不是直接复制所有的代码。命令的一个强大工具,尤其是在处理包含子模块的复杂项目时。它们的状态是由主仓库控制的,这意味着如果你在子模块中做了修改,你需要在子模块中提交这些修改,然后在主仓库中更新子模块的引用。命令,Git不仅会克隆主仓库,还会自动进入每一个子模块,并将它们也克隆下来。这样,你就可以获得一个完全的工作副本,包括所有的子模块。然而,当你克隆一个包含子模块的仓库时,默认情况下,Git只会克隆主仓库,而不会克隆子模块的内容。在Git的众多命令中,

高性价比服务器就选:蓝易云 4637

从零开始:手把手教你规划与部署华为FusionCompute虚拟化平台(含网络规划避坑指南)

本文详细介绍了华为FusionCompute虚拟化平台的规划与部署流程,特别针对网络规划中的常见问题提供了避坑指南。从硬件软件清单检查、网络平面配置到VRM部署方案选择,帮助用户高效完成部署并优化性能,适用于云计算环境中的虚拟化平台搭建。

weixin_28693447的博客 240

Git:git clone 之 --recursive 选项

我们有时在git clone的时候漏掉 --recursive选项,导致编译无法通过。因为如果没有加 --recursive选项,那么代码库中的一些subproject或者submodule的代码将不会被git clone下来,导致缺少文件,从而引发编译错误。--recursive是递归的意思,不仅会git clone当前项目中的代码,也会clone项目中子项目的代码。在git的repo中,可能会有子项目的代码,也就是"git中的git"

龙雪的博客 8329

别再手动测接口了!用Pytest+Requests+Allure搭建你的第一个自动化框架(附完整源码)

本文详细介绍了如何使用Pytest+Requests+Allure搭建Python接口自动化测试框架,涵盖环境准备、核心组件封装、测试用例设计、报告生成及CI/CD集成等关键步骤。通过实战案例和完整源码,帮助开发者快速构建高效的接口自动化测试解决方案,提升测试效率和质量。

weixin_42546508的博客 319

Revit二次开发——不启动Revit,做rvt文件数据导出

Revit二次开发——不启动Revit,做rvt文件数据导出Node.js部分调用C#端供外部调用的dllC#部分调用RevitNet.dll,做数据导出exe做外部调用dll总结功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 N

Y.Jerome的专栏 4110

【Git使用手册】

Git使用手册链接:

whqhai的博客 536

现控报告-- 分析倒立摆系统稳定性、能控性及能观性分析,设计PID控制方案(附matlab)

建立直线一级倒立摆系统的动力学模型,推导该系统的运动方程,求出直线一级倒立摆系统传递函数模型及空间状态方程模型。接着描述了PID控制系统设计原理及PID控制器各校正环节的作用,简要叙述了参数的整定方法。设计了直线一级倒立摆摆杆摆角及小车位置常规单回路控制器,通过Simulink仿真知道常规单回路控制器能控制摆杆摆角,不能控制小车位置。于是设计出了直线一级倒立摆双闭环控制器及基于倒立摆系统的状态空间方程控制器,利用软件进行仿真,仿真结果表明,常规双闭环控制方案和基于状态空间方程加控制方案均能对摆杆摆角及小车位

mengshenglo的博客 4万+

git 工具使用手册

命令描述git init初始化新的Git仓库将文件添加到暂存区提交暂存区的文件到仓库,并附上提交信息git status查看仓库状态git log查看提交历史创建新分支切换分支合并分支添加远程仓库推送本地分支到远程仓库从远程仓库拉取更新Git工具功能强大且灵活,掌握其基本和高级功能对于提高团队协作效率和代码管理能力至关重要。以上内容仅供参考,建议查阅Git官方文档或相关教程以获取更详细的信息和高级技巧。

啊渊的专栏 1598

华为OD机试真题2025双机位C卷 Java&Go 实现【统计员工影响力分数】

华为OD机试真题2025双机位C卷 C语言 实现【统计员工影响力分数】假设你是大型科技公司的数据分析师,负责分析公司内部员工的社交网络。你需要编写一个函数来计算每个员工的影响力分数。影响力分数定义为该员工直接和间接影响的员工数量。 输入描述

MISAYAONE的博客 278

第9集:AI 驱动的智能日志分析!用 RAG 实现秒级日志检索与异常检测

文章摘要:AI驱动的智能日志分析系统 本文介绍了一个基于RAG(检索增强生成)技术的智能日志分析解决方案,旨在解决传统日志系统中的三大痛点:机械的关键词搜索、缺乏语义理解、告警与日志割裂。系统通过以下步骤实现: 环境准备:安装必要的Python依赖库,包括日志处理、Elasticsearch/Loki连接和时序异常检测工具。 核心设计:构建日志处理流水线,分为日志采集、向量化存储和AI检索分析三个阶段,创建专门的日志分析Agent。 技术实现:使用ChromaDB存储日志向量,通过HuggingFace E

qq_2937655951的博客 78

git使用手册

git使用手册 基本git命令,参考原文链接:git使用手册

liu951823274的博客 208

【WRF模拟】如何查看 WPS 的输入静态地理数据(二进制格式)?

如何查看 WPS 的输入静态地理数据(二进制格式)?

WW、forever的博客 632

Git使用手册.pdf 资源介绍

Git使用手册.pdf 资源介绍 【下载地址】Git使用手册.pdf资源介绍 探索Git的无限可能!本仓库精心整理的《Git使用手册.pdf》是每位开发者不可或缺的宝典,无论您是Git新手还是资深用户,都能从中获益。手册详细介绍了Git的核心命令与操作,从克隆仓库到分支管理,再到本地提交与合并,每一步都清晰易懂。您将学会...

gitblog_06755的博客 925

YOLOv10涨点改进:SPPF原创自研创新 | SPPF创新结构,重新设计全局平均池化层和全局最大池化层,增强全局视角信息和不同尺度大小的特征

SPPF原创自研创新

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 2083

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Git 使用手册:从入门到精通

本手册涵盖Git核心功能,建议结合实践操作加深理解。小贴士:掌握命令行操作后使用可视化工具效率更高。

大户影视的博客 1786

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Git Template 使用手册

Git Template 使用手册 1. 目录结构及介绍 Git Template 是一个用于替换默认新创建或克隆的 Git 仓库初始目录的工具。它不仅包含了示例钩子(hooks)文件,这些你可以根据需要修改和适应,还提供了一系列有用的功能(特别是面向PHP的),通过配置脚本来启用或禁用这些钩子,以及参数配置(如果可用)。此外,它还带有一个更新脚本来保持你的模板副本是最新的。 以下是其核心目录结构...

gitblog_00832的博客 461

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Git-Repo 使用手册

Git-Repo 使用手册 项目简介 Git-Repo 是一个基于 Git 的多仓库管理工具,由 Google 开发,最初目的是为了有效管理复杂的 Android 项目中众多的 Git 仓库。它不是用来替代 Git 的,而是作为补充,简化跨多个仓库的工作流程。 项目目录结构及介绍 项目 git-repo 在其GitHub页面上提供的主要是一个核心脚本和相关文档,实际的逻辑和功能实现在这个单一的Py...

gitblog_01197的博客 655

git快速使用手册

git快速使用手册 工作中用不到git,一直都是用的SVN,但是其实我接住git的时间要比SVN要早许多,那是为了用HEXO框免费架搭建自己的个人博客,才接触的,git和github,这个快速手册从网上找到的基本上也是够自己用的了。 创建本地仓 git init 查看本地仓状态 git status 添加 git add 命令是为了让文件添加到Git暂存区 git add -A 提交所有变化...

易慕晓生的博客 373

git基本使用手册

本文介绍基本的git操作,包括git命令行,git分支管理,eclipse git, sourcetree查看版本信息,作为git入门材料。

周双的博客 977

Git使用手册.pdf资源推荐:掌握Git基础操作的宝典

Git使用手册.pdf资源推荐:掌握Git基础操作的宝典 【下载地址】Git使用手册.pdf资源介绍 探索Git的无限可能!本仓库精心整理的《Git使用手册.pdf》是每位开发者不可或缺的宝典,无论您是Git新手还是资深用户,都能从中获益。手册详细介绍了Git的核心命令与操作,从克隆仓库到分支管理,再到本地提交与合并,每...

gitblog_06761的博客 961

Git Reports部署与使用手册

Git Reports部署与使用手册 1. 项目目录结构及介绍 Git Reports基于Ruby on Rails构建,提供了一个简易的服务,允许匿名用户通过稳定的URL提交GitHub仓库中的bug和其他问题。下面是其核心目录结构概览: bin:存放可执行脚本,如rails服务器的启动脚本。 config:包含了应用配置文件,包括数据库配置(database.yml)、路由设置(routes...

gitblog_00594的博客 981

Git Pivotal Tracker Integration 使用手册

Git Pivotal Tracker Integration 使用手册 一、项目目录结构及介绍 本项目 git-pivotal-tracker-integration 是一个增强型的Git工具集,便于开发者与Pivotal Tracker进行集成。下面是其主要的目录结构概述: . ├── bin # 存放可执行脚本,如主程序入口 ├── lib # ...

gitblog_00678的博客 316
上一篇: Redis Sentinel学习和集群
下一篇: C++11新特性学习
okiwilldoit
博客等级 码龄17年 86粉丝 283原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值