版本控制工具git

2024-08-30 03:36
文章标签 工具 git 版本控制

本文主要是介绍版本控制工具git,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

版本控制工具 git

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

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

集中式版本控制系统

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

例如:SVN

缺陷:

1.依赖于中心服务器

分布式的版本管理系统

只有程序员用 git

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

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

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

如果两个人同时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 status

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

untracked 未被追踪的

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

增加追踪 git add
git add xxx.x

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

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

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

b57853b ===> cc30b33

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

修改main.c

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

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

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

流程图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

分支

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

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

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

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

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

新建分支 git branch
git branch b1
gir branch b2

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

时光穿梭:git checkout

checkout 改变 head 的指向

git checkout b1

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

工作的流程:

时空倒流

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

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

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

git merge fix_bug

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

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

冲突

Y型分支:

a,b

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

或者一个修改,一个删除

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

同时修改

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

若是非要merge,打开main.c

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

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

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

冲突的解决方案:

1.找到冲突的文件

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

3.git add

4.git commit

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

远程仓库(联机版)

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于testMyGit,git@gitee.com:xu-tsao/my-git.git 即gitee网页上的就是他的远程仓库,名字是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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
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)]

这篇关于版本控制工具git的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1119682

相关文章

Git可视化管理工具(SourceTree)使用操作大全经典

《Git可视化管理工具(SourceTree)使用操作大全经典》本文详细介绍了SourceTree作为Git可视化管理工具的常用操作,包括连接远程仓库、添加SSH密钥、克隆仓库、设置默认项目目录、代码... 目录前言:连接Gitee or github,获取代码:在SourceTree中添加SSH密钥:Cl

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

Java中的工具类命名方法

《Java中的工具类命名方法》:本文主要介绍Java中的工具类究竟如何命名,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java中的工具类究竟如何命名?先来几个例子几种命名方式的比较到底如何命名 ?总结Java中的工具类究竟如何命名?先来几个例子JD

MySql match against工具详细用法

《MySqlmatchagainst工具详细用法》在MySQL中,MATCH……AGAINST是全文索引(Full-Textindex)的查询语法,它允许你对文本进行高效的全文搜素,支持自然语言搜... 目录一、全文索引的基本概念二、创建全文索引三、自然语言搜索四、布尔搜索五、相关性排序六、全文索引的限制七

基于Java实现回调监听工具类

《基于Java实现回调监听工具类》这篇文章主要为大家详细介绍了如何基于Java实现一个回调监听工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录监听接口类 Listenable实际用法打印结果首先,会用到 函数式接口 Consumer, 通过这个可以解耦回调方法,下面先写一个

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

基于Python打造一个全能文本处理工具

《基于Python打造一个全能文本处理工具》:本文主要介绍一个基于Python+Tkinter开发的全功能本地化文本处理工具,它不仅具备基础的格式转换功能,更集成了中文特色处理等实用功能,有需要的... 目录1. 概述:当文本处理遇上python图形界面2. 功能全景图:六大核心模块解析3.运行效果4. 相

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效