用git管理版本,你必须知道的事情
connygpt 2024-10-19 04:00 7 浏览
git是一个版本控制工具, 版本控制主要的好处有三点:
- 从当前版本回退到任意版本
- 查看历史版本
- 对比两个版本差异
git
相关术语
repository 仓库
branch 分支
summary 摘要
track 跟踪
modify 修改
stage 暂存
commit 提交
push 推送
pull 拉取
clone 克隆
amend 修改
merge 合并
conflict 冲突
origin 源
upstream 上游
downstream 下游
verbose 详情
reflog 参照日志
复制代码
git基础
- modified: 已修改, 修改了项目但没有提交到本地数据库, 也就是没有git add
- staged: 已暂存, 就是执行了git add,但是没有git commit
- committed: 已提交, 保存在本地数据库, 就是执行了git commit
git基本工作流程
- 写代码
- 对修改的文件进行快照, 保存到暂存区域中
- 提交代码, 将暂存区域中的文件快照上传到git中
基本配置
查看当前的git配置:
git config --list
git config user.name
git config user.email
//通过git config -h了解更多的git配置查询
复制代码
修改当前配置(一般只需要配置一次, 但是如果换了电脑, 或者更换了系统我们就需要从新配置):
//用户名配置
git config --global user.name "xiaohuochai"
//邮箱配置
git config --global user.email "121631835@qq.com"
复制代码
项目配置.gitignore
当我们提交项目到git时, 有很多文件是不需要提交的, 比如node_modules, .vscode, .idea等等
这是我们需要在项目的根目录下新建.gitignore文件
node_modules/
/*/node_modules/
.idea
.vscode
复制代码
配置ssh
当我们从github远程服务器pull和push代码时, 如何验证提交和拉取的代码是谁? 为了避免每次输入用户名, 密码的麻烦, 我们可以通过配置ssh来解决。
查看本机的ssh:
//ssh一般存在.ssh中
//打开命令行
cd ~/.ssh //进入对应目录
ls //如果有可以看到私钥id_rsa文件和公钥id_rsa.pub
cat id_rsa.pub 或者 vim id_rsa.pub //查看文件内容
复制代码
如果没有, 我们可以通过下面命令生成
ssh-keygen
复制代码
接下来, 我们复制公钥的内容,登录github
在右上角头像下拉settings -> SSH and GPG Keys中点击 New SSH Key进行添加。
通过ssh -T git@github.com命令来验证SSH是否配置成功。
git基本操作
- 初始化新仓库
git init
复制代码
- 查看文件状态
git status
复制代码
- 文件跟踪
git add xxx //跟踪某个文件
git add . //批量跟踪
复制代码
文件是否add成功, 我们可以通过git status再检查一次
- 文件提交本地仓库
git commit //提交文件到本地仓库
git commit -m 'xxx' //xxx是你本次提交的信息说明
git commit -am 'xxx' //将所有已跟踪的文件暂存起来一并提交
复制代码
- 推送远程仓库
git push origin xxx
//你可以通过-u指定一个默认的源, 这样以后push就不用加origin
git push -u origin xxx
//以后就可以
git push
复制代码
- 拉取远程仓库
git pull origin xxx
//可以简写git pull, 如果提示no tracking information, 我们可以通过下面方法建立追踪,后续就可以直接git pull了
git branch --set-upstream branch-name origin/branch-name
复制代码
- 差异比较
git diff
复制代码
- 查看提交历史
git log //按提交时间列出所有的更新,最近的更新排在最上面
git log --oneline //查看简要的历史记录
git reflog //用来记录每一次命令, 常用来辅助版本切换
复制代码
一次正常的代码提交流程
git pull
git add .
git commit -m 'xxx'
git push
复制代码
git版本切换
有时候业务场景, 或者需求变更等各种因素, 需要我们切换回之前的某个版本。
要进行版本切换, 我们就得知道当前处于哪个版本:
git log --oneline
复制代码
带有HEAD字样的就是我们当前所在版本, 通过git reset --hard id命令切换版本。 id可以是:
- HEAD^ : 上个版本
- HEAD^^: 上上个版本
- HEAD~10: 上10个版本
复制代码
当你切换回上某个版本之后, 通过git log你就看不到最新版本了,这时我们就可以使用git reflog了, 这个命令会按照之前经过的所有的commit路径排列。
git分支管理
我们一般开发都会从master分支分离出dev或者其他开发分支, 用来开发, 这样即使开发出现问题也不会影响主分支。
使用git branch xxx创建一个新的分支。
使用git checkout xxx切换到新的分支
branch, checkout常用命令:
git checkout -b xxx //可以快速新建并切换到新的分支
git branch -d xxx //当分支合并到主分支, 这个分支就可以通过-d删除了
git branch -D xxx //删除那些没有被合并的分支
git branch -a //查看所有分支
复制代码
分支合并
注意: 分支合并时, 你一定要保证你在要合并到这个分支的目标分支上
使用git merge xxx即可将xxx分支合并到你当前所在的分支。
正常的合并分支很简单, 这样就ok了, 但是分支合并, 如果在不同的分支修改了同一个文件的同一部分, 此时git是无法判断该使用哪个分支的代码的, 这样就会产生冲突,虽然git进行了合并, 但并没有提交, 需要我们解决冲突, 重新提交。
我们可以通过git status查看是哪些文件发生了冲突,然后逐一解决, 当我们把冲突的代码按正确的代码修复后, 需要重新git add, git commit, git push。
操作远程仓库
clone远程仓库
通过git clone url来克隆远程仓库
比如:
//这个默认会在你拉取的路径下新建一个blog-mason的文件夹
git clone https://github.com/MasonEast/blog-mason.git
//如果你不想要文件夹blog-mason, 你可以这样, 在url后面,空格加新名字
git clone https://github.com/MasonEast/blog-mason.git newName
//如果你就想要在当前路径下放项目文件, 不要那个外面的文件夹了, 可以用.
git clone https://github.com/MasonEast/blog-mason.git .
复制代码
查看远程仓库git remote
我们克隆的仓库通过git remote会看到一个叫origin的远程库, 这是git默认标识克隆的原始仓库
通过git remote -v或git remote --verbose我们可以查看到更加详细的信息,即对应的项目地址, 正常会有两个, 但如果你没有push权限的话就只能看到一个fetch的地址。
git remote -v
origin git@github.com:MasonEast/blog-mason.git (fetch)
origin git@github.com:MasonEast/blog-mason.git (push)
复制代码
删除远程分支
git push origin :xxx
//也可以
git push origin --delete xxx
复制代码
删除远程仓库
git remote rm xxx
复制代码
重命名远程仓库
git remote rename oldName newName
复制代码
关于误操作
git主要用于版本控制, 协同开发, 误操作可以撤销, 但是有的撤销是不可逆的, 我们一定要慎重对待, 不然可能导致部分代码丢失。
修改最后一次提交
场景: 某次提交完后, 发现少提交了文件, 我们需要撤销刚才的提交, 然后重新提交。
git add xxx //添加少提交的文件到暂存区
git commit --amend //往最后一次提交中追加少提交的文件, 这次提交不会产生记录
复制代码
移除本地仓库的文件
场景: 我们通过git commit将文件提交到本地仓库后, 才想起来把不想提交的文件加进去了。
git rm xxx
复制代码
移除暂存区的文件
场景: 有时候我们习惯性git add ., 但有的文件我们不应该提交, 这时要从暂存区中移除文件。
git reset HEAD xxx //从暂存区中移除xxx文件
复制代码
后话
上述只是日常工作可能会用到的基本操作,这里做一个小小的整理, 还有很多git进阶学习的命令请登录git官方站学习
相关推荐
- 3分钟让你的项目支持AI问答模块,完全开源!
-
hello,大家好,我是徐小夕。之前和大家分享了很多可视化,零代码和前端工程化的最佳实践,今天继续分享一下最近开源的Next-Admin的最新更新。最近对这个项目做了一些优化,并集成了大家比较关注...
- 干货|程序员的副业挂,12个平台分享
-
1、D2adminD2Admin是一个完全开源免费的企业中后台产品前端集成方案,使用最新的前端技术栈,小于60kb的本地首屏js加载,已经做好大部分项目前期准备工作,并且带有大量示例代码,助...
- Github标星超200K,这10个可视化面板你知道几个
-
在Github上有很多开源免费的后台控制面板可以选择,但是哪些才是最好、最受欢迎的可视化控制面板呢?今天就和大家推荐Github上10个好看又流行的可视化面板:1.AdminLTEAdminLTE是...
- 开箱即用的炫酷中后台前端开源框架第二篇
-
#头条创作挑战赛#1、SoybeanAdmin(1)介绍:SoybeanAdmin是一个基于Vue3、Vite3、TypeScript、NaiveUI、Pinia和UnoCSS的清新优...
- 搭建React+AntDeign的开发环境和框架
-
搭建React+AntDeign的开发环境和框架随着前端技术的不断发展,React和AntDesign已经成为越来越多Web应用程序的首选开发框架。React是一个用于构建用户界面的JavaScrip...
- 基于.NET 5实现的开源通用权限管理平台
-
??大家好,我是为广大程序员兄弟操碎了心的小编,每天推荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节省开发效率,实现不加班不熬夜不掉头发,是我的目标!??今天小编推荐一款基于.NE...
- StreamPark - 大数据流计算引擎
-
使用Docker完成StreamPark的部署??1.基于h2和docker-compose进行StreamPark部署wgethttps://raw.githubusercontent.com/a...
- 教你使用UmiJS框架开发React
-
1、什么是Umi.js?umi,中文可发音为乌米,是一个可插拔的企业级react应用框架。你可以将它简单地理解为一个专注性能的类next.js前端框架,并通过约定、自动生成和解析代码等方式来辅助...
- 简单在线流程图工具在用例设计中的运用
-
敏捷模式下,测试团队的用例逐渐简化以适应快速的发版节奏,大家很早就开始运用思维导图工具比如xmind来编写测试方法、测试点。如今不少已经不少利用开源的思维导图组件(如百度脑图...)来构建测试测试...
- 【开源分享】神奇的大数据实时平台框架,让Flink&Spark开发更简单
-
这是一个神奇的框架,让Flink|Spark开发更简单,一站式大数据实时平台!他就是StreamX!什么是StreamX大数据技术如今发展的如火如荼,已经呈现百花齐放欣欣向荣的景象,实时处理流域...
- 聊聊规则引擎的调研及实现全过程
-
摘要本期主要以规则引擎业务实现为例,陈述在陌生业务前如何进行业务深入、调研、技术选型、设计及实现全过程分析,如果你对规则引擎不感冒、也可以从中了解一些抽象实现过程。诉求从硬件采集到的数据提供的形式多种...
- 【开源推荐】Diboot 2.0.5 发布,自动化开发助理
-
一、前言Diboot2.0.5版本已于近日发布,在此次发布中,我们新增了file-starter组件,完善了iam-starter组件,对core核心进行了相关优化,让devtools也支持对IAM...
- 微软推出Copilot Actions,使用人工智能自动执行重复性任务
-
IT之家11月19日消息,微软在今天举办的Ignite大会上宣布了一系列新功能,旨在进一步提升Microsoft365Copilot的智能化水平。其中最引人注目的是Copilot...
- Electron 使用Selenium和WebDriver
-
本节我们来学习如何在Electron下使用Selenium和WebDriver。SeleniumSelenium是ThoughtWorks提供的一个强大的基于浏览器的开源自动化测试工具...
- Quick 'n Easy Web Builder 11.1.0设计和构建功能齐全的网页的工具
-
一个实用而有效的应用程序,能够让您轻松构建、创建和设计个人的HTML网站。Quick'nEasyWebBuilder是一款全面且轻巧的软件,为用户提供了一种简单的方式来创建、编辑...
- 一周热门
- 最近发表
- 标签列表
-
- kubectlsetimage (56)
- mysqlinsertoverwrite (53)
- addcolumn (54)
- helmpackage (54)
- varchar最长多少 (61)
- 类型断言 (53)
- protoc安装 (56)
- jdk20安装教程 (60)
- rpm2cpio (52)
- 控制台打印 (63)
- 401unauthorized (51)
- vuexstore (68)
- druiddatasource (60)
- 企业微信开发文档 (51)
- rendertexture (51)
- speedphp (52)
- gitcommit-am (68)
- bashecho (64)
- str_to_date函数 (58)
- yum下载包及依赖到本地 (72)
- jstree中文api文档 (59)
- mvnw文件 (58)
- rancher安装 (63)
- nginx开机自启 (53)
- .netcore教程 (53)