版本控制工具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

相关文章

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

基于C#实现PDF文件合并工具

《基于C#实现PDF文件合并工具》这篇文章主要为大家详细介绍了如何基于C#实现一个简单的PDF文件合并工具,文中的示例代码简洁易懂,有需要的小伙伴可以跟随小编一起学习一下... 界面主要用于发票PDF文件的合并。经常出差要报销的很有用。代码using System;using System.Col

redis-cli命令行工具的使用小结

《redis-cli命令行工具的使用小结》redis-cli是Redis的命令行客户端,支持多种参数用于连接、操作和管理Redis数据库,本文给大家介绍redis-cli命令行工具的使用小结,感兴趣的... 目录基本连接参数基本连接方式连接远程服务器带密码连接操作与格式参数-r参数重复执行命令-i参数指定命

Python pyinstaller实现图形化打包工具

《Pythonpyinstaller实现图形化打包工具》:本文主要介绍一个使用PythonPYQT5制作的关于pyinstaller打包工具,代替传统的cmd黑窗口模式打包页面,实现更快捷方便的... 目录1.简介2.运行效果3.相关源码1.简介一个使用python PYQT5制作的关于pyinstall

使用Python制作一个PDF批量加密工具

《使用Python制作一个PDF批量加密工具》PDF批量加密‌是一种保护PDF文件安全性的方法,通过为多个PDF文件设置相同的密码,防止未经授权的用户访问这些文件,下面我们来看看如何使用Python制... 目录1.简介2.运行效果3.相关源码1.简介一个python写的PDF批量加密工具。PDF批量加密

bat脚本启动git bash窗口,并执行命令方式

《bat脚本启动gitbash窗口,并执行命令方式》本文介绍了如何在Windows服务器上使用cmd启动jar包时出现乱码的问题,并提供了解决方法——使用GitBash窗口启动并设置编码,通过编写s... 目录一、简介二、使用说明2.1 start.BAT脚本2.2 参数说明2.3 效果总结一、简介某些情

使用Java编写一个文件批量重命名工具

《使用Java编写一个文件批量重命名工具》这篇文章主要为大家详细介绍了如何使用Java编写一个文件批量重命名工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录背景处理1. 文件夹检查与遍历2. 批量重命名3. 输出配置代码片段完整代码背景在开发移动应用时,UI设计通常会提供不

Python按条件批量删除TXT文件行工具

《Python按条件批量删除TXT文件行工具》这篇文章主要为大家详细介绍了Python如何实现按条件批量删除TXT文件中行的工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.简介2.运行效果3.相关源码1.简介一个由python编写android的可根据TXT文件按条件批

详解Python中通用工具类与异常处理

《详解Python中通用工具类与异常处理》在Python开发中,编写可重用的工具类和通用的异常处理机制是提高代码质量和开发效率的关键,本文将介绍如何将特定的异常类改写为更通用的ValidationEx... 目录1. 通用异常类:ValidationException2. 通用工具类:Utils3. 示例文

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只