Git

GIT科普系列5:index in git 背景:git的使用其实没有想象中的那么复杂,平日里真正使用的指令都是极少数、最简单格式的。之所以使用过程中感觉操作复杂、冲突不断,究其根源是对git的设计理念缺乏了解,没有搞清楚git实现版本控制的巧妙之处。之前GIT科普系列试图从底层机制来入手讲解GIT的使用,抱着“授人以鱼不如授人以渔”的心态,但是对于希望快速学习和掌握GIT使用方法的读者来说可能收效甚微。 阅读详情
一 Git 之 工作区/暂存区/版本库/远程仓库
二 Git本地分支与远程分支
三 Git走位技巧

/

一 Git 之 工作区/暂存区/版本库/远程仓库

1.1 Git本地有四个工作区
Git本地有四个工作区:
工作目录(Working Directory):工作区,就是我们平时存放项目代码的地方

暂存区(Stage/Index) :暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息

资源库(Repository或Git Directory):仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本

git仓库(Remote Directory):远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

四个区域的之间的关系如下:

在这里插入图片描述

1.2 Git的工作流程
Git的工作流程一般是这样的
1、在工作目录中添加、修改文件
2、将需要进行版本管理的文件放入暂存区域;
3、将暂存区域的文件提交到git仓库。
因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)
1.3 文件管理的四种状态
版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。
Untracked:   未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.

Unmodify:   文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified.如果使用git rm移出版本库, 则成为Untracked文件

Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过,返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改

Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存,文件状态为Modified

下面的图很好的解释了这四种状态的转变:
在这里插入图片描述

新建文件--->Untracked
使用add命令将新建的文件加入到暂存区--->Staged
使用commit命令将暂存区的文件提交到本地仓库--->Unmodified
如果对Unmodified状态的文件进行修改---> modified
如果对Unmodified状态的文件进行remove操作--->Untracked

二 Git本地分支与远程分支

2.1 创建本地仓库
git init
2.2 从远程仓库克隆代码:
从远程仓库克隆代码
git clone  gitolite@192.168.2.2:repos/git/rk3128_6.0_mid  

*此操作只能够克隆远程仓库的master分支,无法clone所有分支,并在本地自动生成一个本地master分支,对应远程仓库origin/master分支,他俩的代码是关联同步的。

通过 git branch -vv 查看验证本地master分支和远程仓库的origin/master分支对应关系如下:
 *master    85cd054 [origin/master] Initialize rk3128 android 6.0 project list and xml
2.3 查看所有分支,寻找自己需要的分支
2.3.1 查看所有分支
*git branch --all 
-如果远程仓库只有origin/master分支,那么此时只会打印如下两个分支
master[本地主分支] 
origin/master[远程主分支]

-如果远程仓库有一系列分支,那么此时会有一系列分析显示出来,例如
* master //当前所在分支
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/1
  remotes/origin/2
  remotes/origin/3
3.3.2 切换到自己所需要的分支
git checkout -b 1 origin/1

切换到自己所需要的分支,假如需要切换到 1 分支,那么首先需要在本地创建一个同名分支,然后再关联到远程仓库的对应的同名分支

以上操作便可以将 远程仓库的目标分支克隆到本地

三 Git走位技巧

对于同一版本的系统有多个客户的情况,例如,基于Android6.0 系统有多个不同的主板,每个不同的主板又有对应客户不可兼容的需求。很多人一开始选择的方向是每一个客户对应一个系统文件,这样的话就要创建非常多的文件,耗时,而且维护起来非常麻烦。我的技巧是只创建一个系统目录,在该目录下以客户为单位创建分支。

假如基于 Android6.0 系统 某主板 有A客户 A客户有 A1方向需求 和 A2方向需求 两个方向的需求(比如A客户有LVDS接口屏需求 和 MIPI接口屏需求),那么我现在的通常做法是 创建一个 Android6.0 A客户的分支,所有代码的修改最终都要整合到该分支,而且该分支只用于出固件,不用于测试修改代码。那么在哪里测试修改代码呢?那就另外创建一个分支,专门用于修改代码,测试成功之后,整合到 Android6.0 A客户的主分支。具体例程改日贴。

 工作分支 (顶 : 8ec59ce8e1548965a1df50cacecb6ff13d0a5841)
 {
 git clone gitolite@xxxxxx
 git branch -av
 
 //出固件主分支
 git checkout -b xxx分支 remotes/origin/xxxx分支
 
 //lvds 添加功能模块修改分支 用于修改代码 测试通过后合并到主分支  
 git checkout -b xxx分支+func 8ec59ce8e1548965a1df50cacecb6ff13d0a5841
 
 //测试分支修改测试完成 保存add到本地仓库 
 git add / git commit
 git log //查看测试分支提交id 
 
 //将测试分支修改内容 合并到主分支
 首先从测试分支 切换回 主分支
	 
	 单个commit只需要git cherry-pick commitid //此处的id 都是测试分支刚刚提交的id
	 多个commit 只需要git cherry-pick commitid1..commitid100
	 注意,不包含第一个commitid , 即  git cherry-pick (commitid1..commitid100]

 }

技巧二:

基于补丁合并的开发模式:
{
	commit 791456cf9c8e9776e88b62f8085fd9b5930b1033
	Author: MahaoranGitlib <haoran_m@outlook.com>
	Date:   Mon Nov 19 14:02:57 2018 +0800

		Add timing switch firmware default launcher is launcher3

	commit aaaf3d85ea9c5aae11df8adfb11a98f424fc9af5
	Author: MahaoranGitlib <haoran_m@outlook.com>
	Date:   Tue Nov 20 16:57:40 2018 +0800

		patch build_rk3128_m125.sh.patch

	commit 4a9a2597cf747de1da6453ee2db89757ee86a5d2
	Author: MahaoranGitlib <haoran_m@outlook.com>
	Date:   Fri Nov 16 15:53:56 2018 +0800

		offee machine launcher and adding Timing on and off

	commit 8ec59ce8e1548965a1df50cacecb6ff13d0a5841
	Author: leon <leon.yuan@3qvideo.com>
	Date:   Tue Oct 16 11:14:39 2018 +0800

		revert uboot.img and loader.bin for loader

	 
	情景:将 commit aaaf3d85ea9c5aae11df8adfb11a98f424fc9af5 和 commit 791456cf9c8e9776e88b62f8085fd9b5930b1033 两个commit放在  commit 4a9a2597cf747de1da6453ee2db89757ee86a5d2 之后

	git reset --hard 8ec59ce8e1548965a1df50cacecb6ff13d0a5841
		
	git cherry-pick 791456cf9c8e9776e88b62f8085fd9b5930b1033
		
	git cherry-pick aaaf3d85ea9c5aae11df8adfb11a98f424fc9af5

	git cherry-pick 4a9a2597cf747de1da6453ee2db89757ee86a5d2

}

技巧3:

现有三个平台:
A.自己的本地开发分支 : fid3288_f1_r7_chensai_ceshi
B.本地最新代码分支 : fid3288_f1_r7_devel
C.公司代码远程仓库 : fid3288_f1_r7_devel

在A自己的本地开发分支修改代码,目的是push 到 C远程代码仓库。为了安全起见公司会在中间加一个 公司代码本地分支 用来统一同步 远程仓库代码分支。所以想要将A自己的代码分支的改动同步到C远程仓库的做法是:

第一步:先确认本地最新代码分支B是干净的,也就是说需要将本地工作区编辑过的文件添加到暂存区(git add .),或提交到本地仓库中(git commit)。然后同步远程代码到本地:
 
                         B.本地最新代码分支: C.公司代码远程仓库 
	git pull origin fid3288_f1_r7_devel:fid3288_f1_r7_devel 
	
	git log fid3288_f1_r7_devel //查看是否已经更新

第二步:将已经更新的本地最新代码分支B的代码合并到 自己的本地开发分支A,用于在本地统筹代码。
                                       
                                              B                                   B                         A
	git rebase --onto=fid3288_f1_r7_devel fid3288_f1_r7_devel fid3288_f1_r7_chensai_ceshi

 	这个过程如果有合并冲突,需要另外处理,此处不细说

第三步:将 自己的本地开发分支A 上面整合好的代码 push 到 公司代码远程仓库C

	git push origin fid3288_f1_r7_chensai_ceshi:fid3288_f1_r7_devel

技巧4

将本地的master分支推送到origin主机的master分支。如果master不存在,则会被新建。

 git push origin master

如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。

$ git push origin :master
# 等同于
$ git push origin --delete master

技巧5

mhr@king:~/work/gitolite/r4/A18/hongwei/lcd_21_5/rk3188_4.4_mid$ git branch
  master
* rk3188_4.4-A18_v1-devel
  rk3188_r4_v205_devel_A18

查看 rk3188_r4_v205_devel_A18 分支 log

git log rk3188_r4_v205_devel_A18
【GIT】git个人笔记 GIT个人手册 版本 日期 修订内容 作者 V01 2019-06-25 初稿 备注: 使用中不断迭代完善,其他人使用中有其他总结的,可以补充。 目录 第一章说明 一.1.1GIT 中文手册 一.1.2git仓库说明(工作区、暂存区、本地仓、远程仓)1 一.1.3git仓库说明(工作区、暂存区、本地仓、远程仓)2... 阅读详情

相关推荐

GIT泄露

注意:GitHack是在python2的环境下运行的,dirsearch是在python3环境下运行的,在使用命令使用工具时,最好是写明是python2还是python3,特别是kali中,集成了python2和python3,如果不知名python2还是python3,可能会报错。一般情况在没有提示是git时,通过扫描后台来确定是否存在git泄露,或者可以尝试访问git网页,在确定存在git泄露之后,就可以通过githack来下载git文件,再配合git命令来查看git文件中的内容。

weixin_74020633的博客 1339

Git版本发布流程:从标签到正式版本(附案例)

Git版本发布流程详解:从标签创建到部署验证的关键步骤。文章系统介绍了版本发布的完整流程:1)准备工作包括代码测试、审查和版本号规范;2)创建并推送Git标签;3)分支管理策略;4)构建部署方法;5)验证监控环节。通过Python Flask项目案例演示了Docker部署过程,并针对标签冲突、合并冲突等常见问题提供了解决方案。本文为开发者提供了规范的版本发布操作指南,是掌握Git版本控制的重要参考。

fykam的博客 1428

git hook 自动部署 linux git本地服务器搭建 git root 目录 git 仓库 git root/ .git

服务器自动部署项目之GitHooks神器 - 优快云博客--每次都是将本地将代码push到远程仓库,然后再ssh到服务器上git pull,甚是麻烦。在项目开发中使用git的时候,push之后,编译系统会有自动部署等功能。下面是配置方法==首先要明确现在代码的分布情况,1,开发者电脑上的本地仓库,2,git服务器上的远端仓库,3,web服务器上的另一个本地仓库,(我们浏览器访问的就是这里的代码)...

韩梦飞沙_韩亚飞 2039

V4L2视频驱动框架简述(转载)

摘自:https://blog.csdn.net/LinuxArmbiggod/article/details/80310445 V4L2视频驱动框架简述 奶牛养殖场小马 2018-05-14 15:40:1013469 收藏 76 分类专栏: Linux驱动 版权 V4L2框架简述(结合高通平台) 1 硬件 1.1 硬件结构分析 1.2 电路分析 2 软件 2.1 v4l2驱动框架 2.1.1 v4l2驱动框架代码目录分布 2.1.2 v4l2驱动核心结构体 2.2 v...

自主无人机 PX4 ROS SLAM 路径规划 MVS等技术分享 1741

YOLOv8模型INT8量化实战:解决sigmoid输出归零的坑(附代码修改)

本文详细介绍了YOLOv8模型INT8量化过程中遇到的sigmoid输出归零问题及其解决方案。通过修改模型导出代码、优化ONNX量化流程,并提供完整的部署优化技巧,帮助开发者在边缘计算设备上实现高效的模型推理。文章还包含量化效果验证和常见问题排查方法,助力开发者快速解决实际部署中的难题。

vvv99的博客 252

GNSS差分码偏差(DCB)从原理到实战:如何避免数据处理中的常见错误

本文深入解析GNSS差分码偏差(DCB)的原理及其对高精度定位的关键影响。针对数据处理中因忽略DCB校正导致的常见错误,如单系统PPP高程偏差、多系统融合精度下降及电离层研究失真等,提供了实战解决方案与主流DCB产品获取、集成方法,帮助用户有效规避陷阱,提升数据处理精度。

k5l6m的博客 224

Git版本控制

现在我已经对readme.txt文件做了三次修改了,那么我现在想查看下历史记录,如何查呢?删除的文件直接进入暂存区(如果使用rm删除不在暂存区,需要git add才会进入暂存区。:把远程库上的最新代码fetch下来,跟本地主分支合并,如果存在冲突,那么解决冲突。Git 中「添加文件」和「修改提交文件」是最基础的版本控制操作,核心分为。:从远程库上克隆完整的Git仓库(包括代码和版本信息)到本地;:在本地库上提交更新,也就是说,把修改合并到本地主分支;:在本地库上根据不同的开发目的,创建分支,修改代码;

likeyi_lky的博客 965

保姆级教程:用U盘给浪潮服务器装系统(含RAID驱动加载技巧)

本文提供了一份详细的浪潮服务器U盘安装系统指南,重点介绍了RAID驱动加载技巧与实战步骤。从准备工作到系统安装全流程,涵盖RAID配置、驱动加载方法及常见问题排查,帮助用户高效完成服务器系统部署。特别强调RAID驱动与服务器型号的匹配性,确保安装过程顺利。

uuu88的博客 735

Git多人协作开发流程:从分支创建到合并,实战演练(附案例)

本文详细介绍了Git在团队协作开发中的关键流程,包括分支创建、代码开发、提交、审查和合并等环节。通过一个博客系统开发的案例,演示了从克隆仓库到解决冲突的全过程。文章还提供了解决多人协作中常见冲突的方法,并推荐了相关技术专栏供读者深入学习。掌握这些Git协作技巧,能显著提升团队开发效率和代码质量。

fykam的博客 1324

emwin与Modbus通信结合:项目实例

通过实际项目讲解emwin界面设计与Modbus通信协议的融合应用,深入剖析数据交互流程。掌握emwin在工业控制场景中的实用技巧,提升系统人机交互与稳定通信能力。

weixin_34618526的博客 483

ADS交叉耦合振荡器VCO仿真

本文主要参考视频中如何使用进行ADS交叉耦合振荡器仿真和分析,由于视频中有诸多错误和视频清晰度较低,虽然视频博主及时改正,为了节省学习时间,可以直接参考本文。

qq_32589131的博客 5424

常规的Git管理流程

一、前言 Git是目前流行的版本管理工具,大家应该都使用过。虽然Git能为我们的项目管理提供极大的帮助,但是如果使用不当也会造成一些不必要的麻烦,特别是在多人协作的情况下。本文将讲述我们在项目开发中使用的常规Git管理流程。 欢迎大家关注微信公众号:Code满满 二、Git常规管理流程 1、常用的开发分支 master 分支 : 主分支,不轻易改动,主要做正式发版使用,一般发版的包都从 master 分支中构建 pre-release 分支 : 预发布分支,是在正式发版前的测试使用分支,测试使用的包都

李益 5792

虚拟机安装VMware Tools

单击虚拟机-->安装VMware Tool 安装之后会有一个VMware Tools硬盘,里面有VMware Tools.tar.gz的压缩包 按照提示解压它,然后执行vmware-install.pl安装VMware Tools 将安装包放到/tmp目录下。可以直接拽过去,也可以使用cp或者mv命令 进入tmp文件目录并解压此文件包 cd /tmp ...

afei001 620

关于Git这一篇就够了

目录 前言 发展过程 集中式与分布式的区别 Debian/Linux安装Git 配置git环境:git config --global 创建本地空仓库:git init 新建文件添加到本地仓库:git add、git commit -m 改写提交:git commit --amend 查看历史提交日志:git log 回滚代码仓库:git reset --hard 查看提交之后文件是否做了改动:git status 工作区与缓存区 修改缓存区内容:git add、git co.

17岁boy的博客 53万+

在Centos上从零开始部署并运行TinyWebServer服务器,过程记录(非常详细)

TinyWebServer是个什么项目?它是Linux下C++轻量级Web服务器,助力初学者快速实践网络编程,搭建属于自己的服务器。使用线程池+非阻塞socket+epoll(ET和LT均实现) +事件处理(Reactor和模拟Proactor均实现) 的并发模型使用状态机解析HTTP请求报文,支持解析GET和POST请求访问服务器数据库实现web端用户注册、登录功能,可以请求服务器图片和视频文件实现同步/异步日志系统,记录服务器运行状态。......

AnChenliang_1002的博客 3021

人工智能在慢病管理中的具体应用全集:从技术落地到场景创新

这一成果的取得,得益于 AI 对居民血压数据的实时监测和分析,以及及时的干预措施。据统计,医疗支出下降了 18%,这主要是由于 AI 慢病管理系统实现了对慢病患者的早筛早诊早治,减少了并发症的发生,降低了医疗资源的浪费,从而减轻了患者和社会的医疗负担。医院信息系统(HIS)、电子病历(EMR)、区域卫生平台、可穿戴设备(如三诺血糖仪、华为手环)、第三方健康APP以及体检中心的数据往往采用不同的数据标准和格式(如HL7、FHIR、JSON、CSV等),且存储在相互隔离的系统中,形成典型的数据孤岛。

AllenLV的博客 2090

GIT实战篇,教你如何使用GIT可视化工具

经过前三期的学习,不管是GIT模型还是GIT命令,相信大家都已经有了比较全面的了解。当然,尽管GIT命令永远是最强大而全面的,但其并不是只能使用命令来控制,我们还可以使用一些可视化工具。通过界面按钮,能大大提高我们的使用效率。不过,前提是我们已经知道其运行机制,不然就会导致意料之外的情况,这些内容,今天我就带大家一起来学习一些可视化工具的内容

战斧的博客 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【Git】Git使用Gui图形化界面,Git中SSH协议,Idea集成Git

【Git】Git使用Gui图形化界面,Git中SSH协议,Idea集成Git

m0_73192864的博客 8971

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【GIT】git知识总结

Git 是一个强大、灵活且高效的版本控制系统,被广泛用于软件开发和其他领域,是开发者不可或缺的工具之一为什么选择git?Git 提供了强大的版本控制功能,可以追踪文件的每一次修改,记录项目的演变历史。这使得开发者可以随时回滚到之前的版本,比较不同版本之间的差异,以及分析项目的发展轨迹。Git 是一种分布式版本控制系统,每个开发者都可以在本地拥有完整的项目副本,不依赖于中央服务器。这样可以在离线状态下进行工作,并允许灵活的分支管理和合并。

Patrick_yuxuan的博客 2783

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Git 命令

git help command git --version 查看git版本 git init 初始化本地仓库,会在当前目录下创建一个.git的目录 git config user.name "name" 项目级别的签名设置,放在工作...

EmbeddedCoder 的优快云博客 7353

在IDEA中使用Git,把IDEA项目加入Git本地库,使用Git管理Java代码

在IDEA中使用GIT,将项目开发代码加入版本控制。方便尝试开发功能失败时或切换版本,还原至稳定可用的状态

QIFU的专栏 8383

Git操作

git remote add origin https://gitee.com/你的用户名/MyUnityGame.git。git remote add origin https://gitee.com/你的用户名/仓库名.git。git commit -m "描述你的修改内容,例如:更新UI界面,修复登录bug"git config --global user.email "你的邮箱"git config --global user.name "你的名字"git commit -m "解决冲突"

PA_的博客 1038

git pull与git fetch及git merge与git rebase的区别

一、git pull与git fetch区别 1、两者的区别 两者都是更新远程仓库代码到本地 git fetch相当于是从远程获取最新版本到本地,不会自动merge。只是将远程仓库最新commitid记录更新到本地remote中对应的远程分支,而本地head不更新,仍然保持本地的commitid。 git pull相当于是从远程获取最新版本代码并自动merge。只是将远程仓库最新...

星空的风fly 8493

【Git】在Idea中使用Git

安装好IntelliJ IDEA后,如果Git安装在默认路径下,那么idea会自动找到git的位置,如果更改了Git的安装位置则需要手动配置下Git的路径。2、每一位组员从远程仓库克隆项目到idea中,这样每位同学在自己电脑上就有了一个工作副本,可以正式的开始开发了。4、组员A和组员B修改了同一个文件的同一行,提交到本地没有问题,但是推送到远程仓库时,后一个推送操作就会失败。3、组员A修改工作区,提交到本地仓库,再推送到远程仓库。解决方法:需要先获取远程仓库的代码到本地仓库,编辑冲突,提交并推送代码。

咖喱年糕的博客 7192

git Git私服搭建

泡沫☆蓝茶 博客园闪存首页新随笔联系管理订阅 随笔- 22 文章- 0 评论- 3  Hosting a Git server under Apache on Windows July 31, 2010 – 13:12 Last month I posted about hosting a git server under IIS by

荣仔 4737

Git 快速上手

Git 是一款由 Linux 之父 Linus Torvalds 于 2005 年开发的免费、开源的分布式源码管理(SCM,Source Code Management)工具,也称为版本控制系统(VCS,Version Control System),最初的目的是为了管理 Linux 内核的开发。

Doublelv 的博客专栏。 6265
上一篇: LCD点屏杂记
下一篇: TCP/IP框架
Ma浩然
博客等级 码龄9年 1万+粉丝 462原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ma浩然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值