0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Git概述及知识详解

硬件攻城狮 来源:技术让梦想更伟大 作者:技术让梦想更伟大 2022-11-08 14:16 次阅读

	
			
							
							
							

Git 概述

Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。 Git 的特色是分支,人家图标上都敢这么画了。 对了,这里要提一下,Git 和 Linux 是同一个爸爸,所以 Linux 系统上能跑的原生指令 Git 上面也都可以,反之也一样。

git 分区原理

工作区。新文件没被add到暂存区,显红色。 暂存区。进仓库前暂时存放区域,未对本地仓库生效。对暂存区文件修改,显蓝色。第一次创建并add到暂存区的文件,由于远程仓库没同步,显绿色。(注:存放在 “.git/index目录” 本地仓库。暂存区commit代码放入本地仓库,通过 push 推送到远程仓库。(注:存在“.git”目录。 远程仓库。在前面的话,仓库里都有些什么东西只有你自己知道,但是一旦把本地仓库推到远程仓库之后,仓库里有什么东西大家就都知道了。

Git 常用指令

6ef33f82-5f1f-11ed-8abf-dac502259ad0.png

本篇讲解包括但不限于这些命令。 6f038342-5f1f-11ed-8abf-dac502259ad0.png

设置用户签名

开头两个命令是用来设置用户签名的,这个一般就用一次就完事儿了,因为你要提交代码的时候是需要责任跟踪的。 这个 name,email 啥的,人家也不会去认证,不过组里面肯定是会有规范的,也不会让你想起啥名就随便起吧。 6f038342-5f1f-11ed-8abf-dac502259ad0.png

初始化本地库

新手一般就老老实实 git init 起手嘛,昨天我也是这么问我导师的,他说不用,直接 git clone 就好了。我想想也是,团队开发嘛。 6f038342-5f1f-11ed-8abf-dac502259ad0.png

查看本地库状态

git status
首次查看,工作区是没有什么文件的:
$ git status
On branch master
No commits yet
nothing to commit (create/copy files and use "git add" to track)
当我们新增了一个文件之后,再查看状态, 会检测到未追踪的文件:
$ git status
On branch master
No commits yet
Untracked files:
 (use "git add ..." to include in what will be committed)
 hello.txt
nothing added to commit but untracked files present (use "git add" 
to track)
6f038342-5f1f-11ed-8abf-dac502259ad0.png

添加暂存区

git add 文件名
$ git add hello.txt
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working 
directory.
再次查看状态(检测到暂存区有新文件:
$ git status
On branch master
No commits yet
Changes to be committed:
 (use "git rm --cached ..." to unstage)
 new file: hello.txt
6f038342-5f1f-11ed-8abf-dac502259ad0.png

提交本地库

git commit -m "日志信息" 文件名
$ git commit -m "my first commit" hello.txt
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working 
directory.
[master (root-commit) 86366fa] my first commit
1 file changed, 16 insertions(+)
create mode 100644 hello.txt
再查看状态(没有文件需要提交):
$ git status
On branch master
nothing to commit, working tree clean
6f038342-5f1f-11ed-8abf-dac502259ad0.png

修改文件

修改一下文件之后再查看状态:
$ git status
On branch master
Changes not staged for commit:
 (use "git add ..." to update what will be committed)
 (use "git checkout -- ..." to discard changes in working 
directory)
 modified: hello.txt
no changes added to commit (use "git add" and/or "git commit -a")
那么接下来就需要再次将修改的文件提交到暂存区,然后提交到本地仓库。 6f038342-5f1f-11ed-8abf-dac502259ad0.png

查看历史版本

git reflog 查看版本信息
git log 查看版本详细信息
如果是想快速浏览版本信息,可以使用 reflog 即可,毕竟公司项目版本迭代信息可能已经很多了,想看详细日志也得看你有没有那个精力了。
$ git reflog
087a1a7 (HEAD -> master) HEAD@{0}: commit: my third commit
ca8ded6 HEAD@{1}: commit: my second commit
86366fa HEAD@{2}: commit (initial): my first commit
6f038342-5f1f-11ed-8abf-dac502259ad0.png

版本

以前我只知道版本回退,现在我知道原来还能向新。
git reset --hard 版本号
版本号是什么?版本号,查看一下日志就能看到了。
$ git reflog
087a1a7 (HEAD -> master) HEAD@{0}: commit: my third commit
ca8ded6 HEAD@{1}: commit: my second commit
86366fa HEAD@{2}: commit (initial): my first commit
--切换到 86366fa 版本,也就是我们第一次提交的版本
$ git reset --hard 86366fa
HEAD is now at 86366fa my first commit
--切换完毕之后再查看历史记录,当前成功切换到了 86366fa 版本
$ git reflog
86366fa (HEAD -> master) HEAD@{0}: reset: moving to 86366fa
087a1a7 HEAD@{1}: commit: my third commit
ca8ded6 HEAD@{2}: commit: my second commit
86366fa (HEAD -> master) HEAD@{3}: commit (initial): my first commit
--然后查看文件 hello.txt,发现文件内容已经变化
Git 切换版本,底层其实是移动的 HEAD 指针。

Git 分支操作

在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也是指针的引用。

分支基本操作

查看分支

小伙子,不要一上来就想着创建分支嘛。先看看前辈们已经达到了哪个高度了嘛。
git branch -v
$ git branch -v
* master 087a1a7 my third commit (*代表当前所在的分区)

创建分支

git branch 分支名
$ git branch hot-fix
$ git branch -v
hot-fix 087a1a7 my third commit (刚创建的新的分支,并将主分支 master
的内容复制了一份)
* master 087a1a7 my third commit

分支开发

接下来就可以在分支上进行开发了,开发完之后记得将代码提交到本地仓库。

切换分支

git checkout 分支名
$ git checkout hot-fix
Switched to branch 'hot-fix'
--发现当先分支已由 master 改为 hot-fix

合并分支

git merge 分支名
这里有个要注意的点:不仅是可以把旁支合并到主支上,主支也可以被合并到分支上,分支之间也可以互相合并。 反正你爱怎么玩怎么玩,都是在你本地仓库上,又没有推送到远程仓库。 那现在我们想把旁支合并到主支上要怎么做呢?
1、切换到主支
2、git merge 旁支名
这样就万事大吉了吗?不一定的。脑子清醒的话很容易想到一个问题:主支修改了一个文件,分支也修改了同一个文件,现在以谁的为准? 脑子更清醒的人就要说了:你傻呀,我 clone 下来就切到分支去操作了,在我本地仓库我又不会去动主支的。 脑子再清醒一点的人已经懒的跟他说了:大哥,咱这是团队开发,咱的本地仓库早晚是都要合并到主线上的。

合并冲突解决

冲突产生的表现:后面状态为 MERGING 打开冲突文件可以看到冲突的地方:
hello git! hello atguigu!
<<<<<<< HEAD
hello git! hello atguigu! master test
hello git! hello atguigu!
=======
hello git! hello atguigu!
hello git! hello atguigu! hot-fix test
>>>>>>> hot-fix
HEAD 到 === 的部分是主支的,后面是 hot-fix 的 冲突产生的原因: 合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git 无法替我们决定使用哪一个。必须人为决定新代码内容。 解决办法:
1、删掉冲突中不要的部分,留下最终的部分
2、git add 添加到暂存区
3、 git commit -m 注意,此时的 commit 后面不能带文件名。带文件名是几个意思呢?到底用哪个呢?
然后就会发现合并成功了。

Git 团队协作机制

团队协作

跨团队协作

6f68d29c-5f1f-11ed-8abf-dac502259ad0.png

远程仓库

这里不说 github,因为还有 gitlab,公司内部代码怎么能放到广域网上呢!!!

6f77232e-5f1f-11ed-8abf-dac502259ad0.png

6f038342-5f1f-11ed-8abf-dac502259ad0.png

别名

为什么要别名呢?其实起不起别名都无所谓,主要是有个别名方便操作。你说是记一个网址容易还是记一个自己起的名字容易嘞?
$ git remote -v
$ git remote add ori https://github.com/xxx.git
$ git remote -v
ori https://github.com/xxx.git (fetch)
ori https://github.com/xxx.git (push)
6f038342-5f1f-11ed-8abf-dac502259ad0.png

推送本地仓库到远程仓库

当文件还在本地仓库的时候,咱怎么玩都行。但是一旦推送上去了,那就产生历史版本了,大家都看得到了。 不过这个推送啊,也不是咱想推送就能推送的,还得管理员给咱授权,这个不难理解吧。
git push 别名 分支
$ git push ori master
Logon failed, use ctrl+c to cancel basic credential prompt.
Username for 'https://github.com': atguiguyueyue
Counting objects: 3, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 276 bytes | 276.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/atguiguyueyue/git-shTest.git
* [new branch] master -> master
6f038342-5f1f-11ed-8abf-dac502259ad0.png

克隆远程仓库到本地

这不用说吧,这个很简单。咱虽然说之前不会推送,但是拉取还是没有问题的。 clone 会做如下操作: 1、拉取代码。2、初始化本地仓库。3、创建别名。 会创建别名,你 clone 之后用 git remote -v 看一下,一般是 origin。 6f038342-5f1f-11ed-8abf-dac502259ad0.png

拉取远程库内容

这个有两个办法,昨天我用的是先 clone,在 checkout 的方式选择我要的分支。 也可以直接 pull:
git pull 远程库地址别名 远程分支名
$ git pull ori master
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 1), reused 3 (delta 1), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/atguiguyueyue/git-shTest
* branch master -> FETCH_HEAD
 7cb4d02..5dabe6b master -> ori/master
Updating 7cb4d02..5dabe6b
Fast-forward
hello.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11324

    浏览量

    209931
  • Git
    Git
    +关注

    关注

    0

    文章

    201

    浏览量

    15791

原文标题:Git详解,一看就懂!

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    云服务器 Flexus X 实例:部署 Gitea,拥有自己的 Git 仓库,管理本地代码

    本篇文章通过部署 Gitea,实现本地 Git 仓库,真实体验了“云服务器 Flexus X 实例”,深感其卓越性能与灵活性。这款实例以其六倍于常的强劲算力,搭配旗舰级的操作体验,广泛适用于高科技
    的头像 发表于 01-07 16:59 96次阅读
    云服务器 Flexus X 实例:部署 Gitea,拥有自己的 <b class='flag-5'>Git</b> 仓库,管理本地代码

    Flexus X 实例 C#/.Net Core 结合(git 代码管理、docker 自定义镜像)快速发布部署 - 让你的项目飞起来~

    前言 ���云端部署新体验,C# Web API 遇上 Git Docker,828 B2B 企业节特惠来袭!Flexus X 实例,为您的 C#应用提供强大支撑,结合 Git 版本控制
    的头像 发表于 12-25 21:15 175次阅读
    Flexus X 实例 C#/.Net Core 结合(<b class='flag-5'>git</b> 代码管理、docker 自定义镜像)快速发布部署 - 让你的项目飞起来~

    温度振动变送器的概述及功能介绍

    制造业还是战略性新型产业都离不开温度振动变送器的支持。 一、温度振动变送器的概述 温度振动变送器集成了温度传感技术和振动传感技术,可以测量工业设备的振动速度、表面温度等参数。温度振动变送器具有MEMS 芯片,采用嵌入式技
    的头像 发表于 08-20 17:18 553次阅读

    行程开关概述及应用介绍

    一、行程开关概述 行程开关,作为位置开关(限位开关)的一种,是广泛应用于小电流环境中的主要控制电器。它通过机械运动部件的触发来实现触点的接通或断开,进而控制电路,以实现特定的控制目标。这种开关机
    的头像 发表于 08-16 17:31 1118次阅读

    深度神经网络概述及其应用

    通过模仿人类大脑神经元的连接方式和处理机制,设计多层神经元结构来处理复杂的数据模式,从而在各种数据驱动的问题中展现出强大的能力。本文将从深度神经网络的基本概念、结构、工作原理、关键技术以及其在多个领域的应用等方面进行全面概述
    的头像 发表于 07-04 16:08 1404次阅读

    ubuntu下的vscode插件安装idf时,总是找不到git,为什么?

    总是提示:Git is not found in current environment 但是我已经在setting.json下设置了\"git.path\": \"/bin/git\" 同行,命令行里查看
    发表于 06-21 07:16

    通过git命令获取ESP8266_RTOS_SDK失败如何解决?

    本人使用的硬件平台为esp8266,开发环境为ubuntu22.04。在通过git命令获取ESP8266_RTOS_SDK失败,通过上网搜索尝试了很多方法无效。具体情况如下
    发表于 06-07 07:26

    请问下使用IDF怎么做用git做版本控制?

    请问下使用IDF怎么做用git做版本控制?是保存自己应用部分的代码还是整个SDK都要保存,但是整个框架都是官方下的,有没必要保存,求各位大神告知下你们怎么处理的。
    发表于 06-06 07:15

    Git发布新版本 修补五处安全漏洞 包含严重远程代码执行风险

    CVE-2024-32002漏洞的严重性在于,黑客可通过创建特定的Git仓库子模块,诱骗Git将文件写入.git/目录,而非子模块的工作树。如此一来,攻击者便能在克隆过程中植入恶意脚本,用户几乎无法察觉。
    的头像 发表于 05-31 10:09 623次阅读

    飞凌ElfBoard ELF 1板卡-ubuntu18.04 git安装及基本使用

    1.安装gitsudo apt-get install git 2.git初始化git init 3.设置用户名和邮箱git config --global user.name \"你
    发表于 03-21 16:23

    光伏逆变器拓扑概述及关键技术

    光伏逆变器拓扑概述及关键技术
    的头像 发表于 02-21 09:47 883次阅读
    光伏逆变器拓扑<b class='flag-5'>概述及</b>关键技术

    蓝牙 | 软件:Git管理高通的ChipCode项目

    最近发现大家在高通chipcode网站上下载不了代码,小编一直使用git的方式获取新版本代码,没有遇到什么阻碍。于是小编到新主机上尝试下载代码的压缩包和git代码,都遇到了问题。由于压缩包是高通自己
    的头像 发表于 01-26 08:29 423次阅读
    蓝牙 | 软件:<b class='flag-5'>Git</b>管理高通的ChipCode项目

    克服PLC编程的难题—基于Git的软件

    Git是一种分布式版本控制系统,它可以记录文件的修改历史和版本变化,并可以支持多人协同开发。
    的头像 发表于 01-22 09:30 979次阅读
    克服PLC编程的难题—基于<b class='flag-5'>Git</b>的软件

    Omniverse Nucleus概述及特征

    NVIDIA Omniverse™ Nucleus 是 NVIDIA Omniverse 的数据库和协作引擎。
    的头像 发表于 01-17 09:22 842次阅读
    Omniverse Nucleus<b class='flag-5'>概述及</b>特征

    Git开发者关注内存安全问题,探讨引入Rust语言

    根据最新披露的邮件讨论,Git开发团队热议在Git项目中引入Rust的可行性。作为一种开源的分布式代码版本管理工具,广泛运用于各种开发项目。尽管现在Git项目主要以C与Python为主要开发语言,但探讨显示,引入Rust能显著降
    的头像 发表于 01-15 14:23 645次阅读
    <b class='flag-5'>Git</b>开发者关注内存安全问题,探讨引入Rust语言