版本控制工具git

news/2024/9/19 0:51:42/ 标签: git

git_0">版本控制工具 git

数据库 ==> 有代码历史版本 ==> 仓库

每个文件都是不同的历史版本,以便恢复

集中式版本控制系统

git.assets%2Fimage-20240223150511033.png&pos_id=img-89h1U1Hx-1724943011165" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

例如:SVN

缺陷:

1.依赖于中心服务器

分布式的版本管理系统

只有程序员用 git

git.assets%2Fimage-20240223151324682.png&pos_id=img-557QlFDG-1724943011166" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

只有需要在同步代码的时候需要联网

程序员电脑里有代码的所有历史版本

左边的中央服务器只解决转发

如果两个人同时push,解决冲突问题?

仓库对应到计算机就是一个文件夹

  1. 本地安装git

    在ubuntu上安装git

    sudo apt install git
    

    设置用户名

    git config --global user.name "xxx"
    

    设置email

    git config --global user.email xxx.@xxx.com
    

    默认编辑器改为vim

    git config --global core.editor vim
    
  2. gitee网站上建一个仓库

克隆仓库

配置密钥
cat ~/.ssh/id_rsa.pub

若没有,就用 ssh-keygen 生成公钥

将密钥内容拷贝到个人账号(不是仓库的)中的SSH公钥中

将仓库克隆到本地

.git/ 存放所有历史版本

剩下的是当前的版本

做完克隆后是两个仓库

git.assets%2Fimage-20240223154936658.png&pos_id=img-UER1OIyB-1724943011166" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

本地

查看仓库状态

接下来的所有命令,都必须要在仓库内执行

git status

git.assets%2Fimage-20240223201040578.png&pos_id=img-kHHJ28OF-1724943011166" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

.git/为历史文件
其他为工作树(当前工作区)

untracked 未被追踪的

任意 .o文件 .exe文件 测试文件必须一直处于untracked状态,不要被历史记录追踪到

git.assets%2Fimage-20240223155746094.png&pos_id=img-twiu1EJK-1724943011166" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

git_add_114">增加追踪 git add
git add xxx.x

只添加单个文件,不要添加文件夹(不然删除的时候可能会比较麻烦)

git.assets%2Fimage-20240223155956284.png&pos_id=img-vTY0h2Yv-1724943011167" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

git_restore_124">清理暂存区 git restore
根据提示输入命令,不同版本可能不同
git restore

git.assets%2Fimage-20240223201111048.png&pos_id=img-6Ct21e0d-1724943011167" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

git.assets%2Fimage-20240223160317493-1708675399887-1.png&pos_id=img-xcX3QwdH-1724943011167" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

根据提示清理暂存区(使用的命令可能不同)

git_commit_137">提交记录,只会提交暂存区的(记录不准修改) git commit
git commit -m "xxxxxxxxxxxxxxxx"

根据文件内容判断文件是否修改

git.assets%2Fimage-20240223160750404.png&pos_id=img-OwZFVp5Y-1724943011167" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

git_log_oneline_graph_all_147">列出所有历史记录 git log --oneline --graph --all
git log --oneline --graph --all

这个版本所有文件加在一起算的sha1哈希值

git.assets%2Fimage-20240223160718618.png&pos_id=img-OLeKU5sz-1724943011167" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

版本靠哈希值区分,每提交一个版本算一次哈希值

b57853b ===> cc30b33

创建文件 ==> 增加追踪 ==> 提交记录 ==> 所有文件都已被追踪

git.assets%2Fimage-20240223160931852.png&pos_id=img-WGekTm7i-1724943011168" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

修改main.c

git.assets%2Fimage-20240223161327038.png&pos_id=img-Kk04n0lz-1724943011168" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

修改后的文件处于修改状态(modified)

git_restore_171">恢复修改,回到上个版本的内容 git restore
git restore main.c

可以用git add将modified状态修改为staged,再git commit将main.c的修改永远留在历史版本中

流程图

git.assets%2Fimage-20240223232611197.png&pos_id=img-uWLucGYI-1724943011168" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

分支

执行后续的所有命令,必须先 git status,以确保工作树干净。

分支:指向某个版本的指针,内容包含它指向的分支和历史版本

特殊的指针变量 HEAD(当前的分支)

当commit时,只有HEAD分支会往后走,其它的不变

git log --oneline --graph --all 查看

git.assets%2Fimage-20240223234402590.png&pos_id=img-Kk0VUusH-1724943011168" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

git_branch_201">新建分支 git branch
git branch b1
gir branch b2

当 commit 时,只有HEAD分支会往后走,其它的不变

git.assets%2Fimage-20240223234752961.png&pos_id=img-0Hg3zFFW-1724943011168" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

git_checkout_214">时光穿梭:git checkout

checkout 改变 head 的指向

git checkout b1

git.assets%2Fimage-20240223234955199.png&pos_id=img-OY9y3Cbk-1724943011168" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

工作的流程:

时空倒流

1)git branch fix_bug

2)git checkout fix_bug

3)修复代码,提交了一个新的版本git add,git commit,在fix_buf上就有提交,

===> 若不要了,切回master,删除掉fix_bug(单机版分支,自己保留的不用告诉其他人)

注意:git删除分支时报的错误,删除分支时,当前分支不能停留在要删除的分支上,要切换到其他任意分支,再去删除目标分支

git branch -D fix_buf

===> 保留,合并分支merge

流程:
checkout 到 master
merge fix_buf
branch -D fix_buf

实际工作中一般都在 fix_buf 写代码

git_merge_253">合并分支的第一种情况:快进情况 git merge

active 主动方 passive被动方,被动方处于主动方正下游,主动方一定要处于上游

git.assets%2Fimage-20240223164014016.png&pos_id=img-85aJQHuv-1724943011169" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

git checkout active
git merge passive
复杂的分支合并

Y型结构,主动方merge 分支,在两个分支的公共下游创建一个新的提交,让主动方的指针移动到新的位置

git merge fix_bug

git.assets%2Fimage-20240224001946611.png&pos_id=img-NwQt44T5-1724943011169" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

git.assets%2Fimage-20240224093644100.png&pos_id=img-H2dCaa5A-1724943011169" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

git.assets%2Fimage-20240224093730587.png&pos_id=img-h2lzgkeT-1724943011169" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

以master作为主动方merge fix_bug,产生一个新的提交,他既是master的下游也是fix_bug的下游

此时若checkout回fix_bug,master作为fix_bug的下游,在fix_bug中添加新文件,修改文件,再add,commit,merge回master,是一种合法的无冲突的merge操作(快进模式)

冲突

Y型分支:

a,b

修改同一个文件同一位置,

或者一个修改,一个删除

git.assets%2Fimage-20240224095332213.png&pos_id=img-ZiGUrCy9-1724943011169" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

同时修改

git.assets%2Fimage-20240224101046593.png&pos_id=img-9PqWIUX2-1724943011169" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

git.assets%2Fimage-20240224101117102.png&pos_id=img-kSZWJ8hc-1724943011170" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

git_merge_304">恢复到git merge之前的状态
git merge --abort

git.assets%2Fimage-20240224101300309.png&pos_id=img-PiunKaTD-1724943011170" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

若是非要merge,打开main.c

git.assets%2Fimage-20240224101356240.png&pos_id=img-PpNO3qrv-1724943011170" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

<<<<<<< HEAD	主动方版本的内容
>>>>>>> fix_bug	被动方版本的内容

修改main.c 保留想要的内容

然后再add,再commit,看日志文件:

git.assets%2Fimage-20240224101808022.png&pos_id=img-QGGUzZTt-1724943011170" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

冲突的解决方案:

1.找到冲突的文件

2.根据业务需求,修正文件 ===> 使用 git status

3.git add

4.git commit

一改一删
git rm test.c
git commit -m "rm test.c"

git.assets%2Fimage-20240224102306380.png&pos_id=img-noagxA6J-1724943011170" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

git.assets%2Fimage-20240224102337520.png&pos_id=img-C9ZwTSY5-1724943011170" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

git.assets%2Fimage-20240224102400235.png&pos_id=img-azixZjSp-1724943011170" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

发现冲突时要多用git status命令,它会提示怎么做

远程仓库(联机版)

git remote -v	列出关联的远端仓库的信息

git.assets%2Fimage-20240224103258248.png&pos_id=img-01G76gxM-1724943011170" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />

对于testMyGit,git@gitee.com:xu-tsao/my-git.gitgitee网页上的就是他的远程仓库,名字是origin

三个仓库的master不同,但是是同名分支,同名分支支持push/fetch 推送/获取

git push origin master	前提:本地的master是origin/master的正下游
test2仓库:
git fetch origin master	相当于把上面分支的内容取下来拿到下面,origin/master是远程分支在本地仓库的引用
以master作为主动方,origin/master作为被动方,进行merge
git checkout master
git merge origin/master	注意merge要有/

test2中若想同步fix_bug分支,

首先要在网页上创建一个fix_bug同名分支

test1仓库:
git fetch origin fix_bug	这时仓库中就有一个远端的origin/fix_bug
git checkout fixbug
git merge origin/fixbug
git push origin fix_bug
另一边test2仓库:
git fetch origin fix_bug	这时仓库中就有一个远端的origin/fix_bug
git branch fix_bug	三个fix_bug是同名分支,就可以push/fetch
pull 相当于先fetch,再merge
git fetch origin master
git merge origin/master
======>
git pull origin master

git.assets%2Fimage-20240224102602424.png&pos_id=img-2dhLyI7Q-1724943011171" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />
h origin fix_bug 这时仓库中就有一个远端的origin/fix_bug
git checkout fixbug
git merge origin/fixbug
git push origin fix_bug


另一边test2仓库:
git fetch origin fix_bug 这时仓库中就有一个远端的origin/fix_bug
git branch fix_bug 三个fix_bug是同名分支,就可以push/fetch


pull 相当于先fetch,再merge
git fetch origin master
git merge origin/master
======>
git pull origin master

[外链图片转存中...(img-2dhLyI7Q-1724943011171)]

http://www.ppmy.cn/news/1519930.html

相关文章

Java笔试面试题AI答之面向对象(9)

文章目录 49. 简述Java继承时&#xff0c;类的执行顺序是什么&#xff1f;一、类的静态成员初始化顺序二、对象的初始化顺序三、总结 50. 举例说明什么情况下会更倾向于使用抽象类而不是接口&#xff1f;1. 当需要定义和实现部分通用行为时2. 当需要访问修饰符或方法修饰符时3.…

sqlite3的db.wait方法:等待所有查询完成

Node.js中sqlite3的db.wait方法深入解析 在Node.js环境中&#xff0c;sqlite3库为开发者提供了一个与SQLite数据库进行交互的简洁API。在处理数据库操作时&#xff0c;有时需要等待直到所有的查询都完成&#xff0c;这时db.wait方法就显得尤为重要。本文将深入解析sqlite3库中…

基于Python的机器学习系列(22):高斯混合模型(GMM)聚类的改进版

在之前的篇章中&#xff0c;我们介绍了高斯混合模型&#xff08;GMM&#xff09;及其基本实现。本文将扩展这一模型&#xff0c;重点是引入早停机制来提高训练效率&#xff0c;并且在训练过程中每隔一定的迭代次数绘制聚类结果&#xff0c;以便观察模型的收敛情况。 引入早停机…

Windows下使用pm2管理多个前端vue项目

1. 安装Node.js和npm: 确保你已经在Windows系统上安装了Node.js和npm。你可以在Node.js的[官方网站](https://nodejs.org/)下载并安装适合你系统的版本。 2. 安装pm2: 打开命令提示符(或PowerShell),运行以下命令来全局安装pm2: npm install pm2 -g 3. 创建pm2配置…

React16新手教程记录

文章目录 前言一些前端面试题1. 搭建项目1. 1 cdn1. 2 脚手架 2. 基础用法2.1 表达式和js语句区别&#xff1a;2.2 jsx2.3 循环map2.4 函数式组件2.5 类式组件2.6 类组件点击事件2.6.1 事件回调函数this指向2.6.2 this解决方案2.6.2.1 通过bind2.6.2.2 箭头函数&#xff08;推荐…

【C++ 游戏】密室逃脱

首先来大张旗鼓的介绍一下&#xff1a; 全网之最&#xff1a; 本游戏为全网第一篇C语言的密室逃脱类剧情游戏 本游戏为全网第一篇将画面类同等性质转化为文字类的游戏 本游戏为画——文类型游戏的突破口&#xff0c;适合借鉴 哈哈好了不吹了&#xff0c;不过上面的都是真的。 …

温馨网站练习运用

第二次与团队一起制作网页虽然不进行商用&#xff0c;但是练习一下还是好的&#x1f60a;&#x1f60a; 我主要负责后端部分&#xff0c;该项目用了SpringBoot框架、SpringSecurity的安全框架、结合MyBatis-Plus的数据库查询。如果想看看&#xff0c;网站&#xff1a;温馨网登…

AI大模型之旅-本地安装llm工具dify 和 fastgpt

一:安装dify 官网地址&#xff1a; https://dify.ai/ 克隆 Dify 源代码至本地。 git clone https://github.com/langgenius/dify.git 启动 Dify 进入 Dify 源代码的 docker 目录&#xff0c;执行一键启动命令&#xff1a; cd dify/docker cp .env.example .env docker com…

多目标应用:基于自组织分群的多目标粒子群优化算法(SS-MOPSO)的移动机器人路径规划研究(提供MATLAB代码)

一、机器人路径规划介绍 移动机器人&#xff08;Mobile robot&#xff0c;MR&#xff09;的路径规划是 移动机器人研究的重要分支之&#xff0c;是对其进行控制的基础。根据环境信息的已知程度不同&#xff0c;路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或…

71. 简化路径算法实现详解(goalng版)

LeetCode 71. 简化路径详解 一、题目描述 给你一个字符串 path,表示指向某一文件或目录的 Unix 风格绝对路径(以 ‘/’ 开头),请你将其转化为更加简洁的规范路径。 在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点(…)表示将目录切换到上一级(…

数据结构代码集训day14(适合考研、自学、期末和专升本)

题目均来自b站up&#xff1a;白话拆解数据结构&#xff01; 今日题目如下&#xff1a;&#xff08;1&#xff09;试写一个算法判断给定字符序列是否是回文。 &#xff08;2&#xff09;给定一个算法判断输入的表达式中括号是否匹配。假设只有花、中、尖三种括号。 题1 回文序列…

【类模板】类模板的特化

一、类模板的泛化 与函数模板一样&#xff0c;类模板的泛化就是普通的模板&#xff0c;不具有特殊性的模板。 以下的类模板为泛化的版本 //类模板的泛化 template<typename T,typename U> struct TC {//静态成员变量static int static_varible; //声明TC() {std::cout…

【Java EE】JVM

目录 1. JVM简介 2.JVM运行流程 3.JVM运行时数据区 3.1 堆&#xff08;线程共享&#xff09; 3.2 Java虚拟机栈&#xff08;线程私有&#xff09; 1. JVM简介 JVM是 Java Virtual Machine 的简称&#xff0c;意为Java虚拟机。 虚拟机是指通过软件模拟的具有完整硬件功能的…

python-简单的dos攻击

前言 这个是DOS攻击学习(注意&#xff1a;千万别去攻击有商业价值的服务器或应用&#xff0c;不然会死的很惨(只有一个IP通过公网访问容易被抓),前提是网站没有攻击防御) 创建一个以python编写的后端web服务(好观察) 安装flask pip install flask from flask import Flaskapp …

Android使用前台服务

Android使用前台服务 服务几乎都是在后台运行的&#xff0c;一直以来它都是默默地做着辛苦的工作。但是服务的系统优先级还是比较低的&#xff0c;当系统出现内存不足的情况时&#xff0c;就有可能会回收掉正在后台运行的服务。 如果你希望服务可以一直保持运行状态&#xff…

使用golang的AST编写定制化lint

什么是lint &#xff08;来自wiki&#xff09;在计算机科学中&#xff0c;lint是一种工具程序的名称&#xff0c;它用来标记源代码中&#xff0c;某些可疑的、不具结构性&#xff08;可能造成bug&#xff09;的段落。它是一种静态程序分析工具&#xff0c;最早适用于C语言&…

【13年12月CCF计算机软件能力认证】:出现次数最多的数、ISBN号码、最大的矩形、有趣的数、I‘m stuck!

题目概括出现次数最多的数暴力枚举&#xff0c;非常简单ISBN号码直接模拟&#xff0c;非常简单最大的矩形用到双指针&#xff08;优化枚举&#xff09;&#xff0c;非常简单有趣的数用到了数学知识排列组合&#xff0c;有一定思维难度I’m stuck!我用到了两个dfs来解决&#xf…

【区块链 + 供应链】广汽本田区块链合同供应链管理系统 | FISCO BCOS应用案例

广汽本田是国内汽车制造的龙头&#xff0c;每年销售额超千亿级别&#xff0c;每年的合同采购规模量在百亿以上。企业内部采用传 统的中心化方式管理合同&#xff0c;由于涉及部门众多&#xff0c;需要管理的合同要素也各不相同&#xff0c;造成信息不集中、合同版本众多、 合同…

C#中lock(this)与lock(private object)区别

前言 在使用多线程编程时&#xff0c;我们会对代码关键部分确保其一次只由一个线程执行&#xff0c;对于防止争用条件和保持数据完整性至关重要。在C#中&#xff0c;lock 语句就是用于通过同步对共享资源的访问来实现此目的工具。本文介绍lock(this) 与lock(private object) 两…

重新修改 Qt 项目的 Kit 配置

要重新修改 Qt 项目的 Kit 配置&#xff0c;你可以按照以下步骤进行操作&#xff1a; 1. 打开 Qt Creator 首先&#xff0c;启动 Qt Creator&#xff0c;确保你的项目已经打开。 2. 进入项目设置 在 Qt Creator 中&#xff0c;点击菜单栏的 “Projects” 标签&#xff08;通…