Git:在实际开发中的使用(够你用十年)

news2024/11/17 21:56:23

Repository

我们先来认识一下版本库——Repository,接下来我们所有提到的 Git 基础命令,都是基于版本库的。

那么什么是版本库呢?版本库又名仓库,英文名 repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

仓库又分为本地仓库和远程仓库:

  • 本地仓库:项目在你本地开发机(电脑)存放的历史记录
  • 远程仓库:项目在服务器上(如GitHub、GitLab)的历史记录

接下来,我们首先看看 Git 版本库创建的相关命令。

初始化本地仓库 —— git init

  1. 创建一个空目录,作为项目文件夹

    //创建一个空目录
    mkdir ios-git  
    cd ios-git  
    pwd
    <!-- /Users/xxx/ios-git  -->
    
  2. 初始化仓库

    git init
    

    瞬间 Git 就把本地仓库建好了,而且告诉你是一个空的仓库(empty Git repository),同时在当前目录下多了一个.git的目录,这个目录是 Git 来跟踪管理版本库的,如果你没有看到 .git 目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看到了。

  3. 连接远程仓库
    以只是在本地创建了仓库,团队协作中为了让大家都可以访问,需要把代码放在远程仓库(你可以在GitHub、Gitee或GitLab上创建远程仓库):

git remote add origin ssh://git@git.xxx.com:2289/ios/docs.git
git add .
git commit -m "Initial commit"
git push -u origin main

这样才是一个完整的仓库创建。

克隆现有的仓库 —— git clone

如果远程仓库已经存在项目,你想把项目拉取下来,那就简单了。这时就要用到 git clone 命令,Git 克隆的是该 Git 仓库服务器上的几乎所有数据,每一个文件的每一个版本都将被拉取下来

git clone https://gitcode.net/codechina/help-docs

这会在当前目录下创建一个名为 help-docs 的目录,并在这个目录下初始化一个 .git 文件夹,如果你进入到这个新建的 help-docs 文件夹,你会发现所有的项目文件已经在里面了,准备就绪等待后续的开发和使用。

自定义本地仓库名称

你想在克隆远程仓库的时候,自定义本地仓库的名字:

git clone https://gitcode.net/codechina/help-docs mydocs

以上就是开发的准备工作,初始化Git后,就是在工作中的使用了,下面列举一些常用的Git方法:

Git 常用方法

作用方法备注描述
查看仓库当前状态变化git status git status -s 简短输出查看工作区和暂存区有没有未提交的文件
比较变动git diff readme.txt查看readme.txt具体修改的内容是什么
添加git add readme.txt git add .把文件从工作区添加到暂存区git add .是添加所有修改的文件
提交git commit -m "提交备注" git commit -a git commit -am "提交备注"把暂存区的所有内容提交到当前分支,你可以在 “” 里面备注自己提交的什么 -a是代表add,也就是不用单独再使用add命令了,
拉取git pull git pull origin git pull origin master:devgit pull origin master:dev 拉取master分支合并到dev分支
推送git push git push origin master git push --force origin master 强制推送如果本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数
查看日志git loggit log --oneline git log --reverse --oneline查看当前HEAD及之前提交的历史记录--oneline 简洁输出--reverse 正序输出,默认时间倒序输出最近时间的
查看修改记录git blame readme.txt查看readme.txt文件的修改记录
重置/回退git reset --hard HEAD^ git reset --hard commit_idGit 中,用HEAD表示当前版本,也就是最新的提交e55063a,上一个版本就是HEAD^,上上一个版本就是HEAD^^,100个^写成HEAD~100,也可重置到指定的commit_id resetHEAD 指向自己重置的提交记录commit_idcommit_id之后的提交记录都不复存在
还原/回滚git revert --hard HEAD^ git revert --hard commit_idgit revert是用来重做某一个 commit 提交的内容,在分支上面会创建了一个新的 commit 提交,我们还原commit_id这条记录时,这条记录提交的代码会被清掉,这条记录之前和之后的代码还在
查看本地日志git reflog查看当前HEAD之前和之后(也就是整个分支)提交的历史记录如果你reset后,第二天后悔了,git log是查不到你昨天的提交记录的,git reflog就可以,然后再用git reset --hard commit_id回到最初的代码reflog并不是Git仓库的一部分,它是本地.git/logs/HEAD或者是.git/logs/refs目录中的文件,只能看到你在本地操作的提交记录。
补提交git commit --amendgit commit --amend -m "提交描述"当你git commitgit push时,发现还有修改需要提交,但是不想再增加commit记录git commit --amend会创建一个新的commit_id覆盖之前的commit_old记录,git log查看记录会看到新的commit_id记录,之前的commit_old记录就没了。
取消暂存git reset HEADgit reset HEAD readme.txt把文件从暂存区恢复到工作区,上面讲到的重置命令是加了--hard,意思是将工作区和暂存区都恢复到最初
撤消修改git checkout . git checkout -- readme.txt文件在工作区没有放到暂存区时(未add),想放弃对文件的修改 git checkout .放弃所有
查看分支git branch 查看本地分支 git branch -a 查看远程分支
创建分支git checkout -b dev git branch dev创建 dev 分支
切换分支git checkout dev git switch dev切到 dev 分支上
合并指定分支到当前分支git merge dev把dev分支合并到当前分支
删除分支git branch -d dev
创建标签git tag v1.0git tag -a v1.0 -m "发布1.0版本"
查看所有标签git tag查看本地标签git ls-remote --tags origin 查看远程标签
删除标签git tag -d v0.1 删除本地标签 git push origin :refs/tags/v0.1 删除远程标签如果你已经推送到远程了,那这两个命令都要用
推送tag标签git push origin v0.1 推送单个taggit push --tagsgit push origin --tags开发中直接使用git push --tags就足够了
查看缓存列表git stash list
缓存git stash git stash save git stash save "xxx"将文件从工作区移除然后放在缓存里,stash 只会操作被git追踪的文件,新增的文件并不会进入缓存,因为git还没有追踪这个新增的文件。
取出缓存git stash pop git stash pop stash@{$num}取出缓存到工作区并从堆栈中移除stash 默认恢复git栈中最新的一个stash@{num},建议在git栈中只有一条的时候使用,以免混乱 也可以指定stash@{$num}
恢复缓存git stash apply git stash apply stash@{$num}将堆栈中的内容恢复到当前分支下,该命令不会将内容从堆栈中删除缓存
移除缓存git stash drop git stash drop stash@{$num}从堆栈中移除stash、移除指定的stash@{$num}
清空缓存git stash clear移除全部的stash

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/136272.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AcWing 数学知识

质数 模板&#xff1a; // 试除法判断质数 bool is_prime(int x) {if (x < 2) return false;//只需枚举一部分 使得 i< x / i, 时间复杂度为√nfor (int i 2; i < x / i; i )if (x % i 0)return false;return true; }// 试除法分解质因数 void divide(int n) {fo…

免费的 AI 动作捕捉工具 #Rokoko Video

创建动画可能很棘手&#xff0c;但使用对了技术和工具&#xff0c;可以轻松实现看起来很棒且功能流畅的完美动画。“ 为每个创作者配备动捕的力量。”近期&#xff0c;Rokoko 通过推出免费的 AI 动作捕捉工具 Rokoko Video来兑现这一承诺。图片来源 &#xff1a;Rokoko为什么说…

CSS弹性盒子(flexbox)实用指南

CSS弹性盒子&#xff08;flexbox&#xff09;实用指南上一节&#xff1a;《CSS 浮动 及其应用 》| 下一节&#xff1a;《CSS网格布局&#xff08;grid&#xff09;实用指南 》jcLee95&#xff1a;https://blog.csdn.net/qq_28550263?spm1001.2101.3001.5343 邮箱 &#xff1…

复习:矩阵计算与自动求导

矩阵计算 矩阵计算就是讲矩阵如何求导数&#xff0c;所有优化模型的求解也是通过求导数实现的。 首先回忆初高中学习的导数知识&#xff0c;这属于标量的导数。 将导数拓展到不可微的情况&#xff0c;这就是亚导数。 将导数拓展到向量&#xff0c;这就是梯度。 向量对向量求…

java优化-代码重,让代码更优美和简洁

简言 在项目工作中&#xff0c;经常会有优化&#xff0c;有sql优化&#xff0c;项目架构优化&#xff0c;业务层优化&#xff0c;代码结构优化等&#xff0c;这些优化都是为了系统&#xff0c;易维护&#xff0c;易懂&#xff0c;易扩展。下面是我个人总结的一些经验分享与大家…

JavaScript 函数-函数概念,使用,函数参数,返回值,arguments的使用,函数的申明方式...

JavaScript 函数 目录JavaScript 函数1. 函数的概念2. 函数的使用2.1 声明函数2.2 调用函数2.3 函数的封装3. 函数的参数3.1 形参和实参3.2 函数参数的传递过程3.3 函数形参和实参个数不匹配问题4. 函数的返回值4.1 return 语句4.2 return 终止函数4.3 return 的返回值4.4 函数…

喜讯 | 代谢组学领航企业百趣生物完成数千万元A+轮融资!

2023年1月3日&#xff0c;国内代谢组学研究领航企业上海百趣生物医学科技有限公司&#xff08;以下简称“百趣生物”&#xff09;宣布完成数千万元A轮战略融资。本轮融资由金域医学集团及其参股基金科金金域领投&#xff0c;老股东启明创投跟投。 本次融资资金将用于推动公司结…

教育行业课程介绍话术

教育行业&#xff0c;吸引生源是很重要的一项工作&#xff0c;但是机构或企业能吸引到生源的前提一定是学员对于机构所授课程有强烈的兴趣。 前言 教育行业&#xff0c;吸引生源是很重要的一项工作&#xff0c;但是机构或企业能吸引到生源的前提一定是学员对于机构所授课程有强…

MyBatisPlus ---- 插件

MyBatisPlus ---- 插件1. 分页插件a>添加配置类b>测试2. xml自定义分页a>UserMapper中定义接口方法b>UserMapper.xml中编写SQLc>配置文件d>测试3. 乐观锁a>场景b>乐观锁与悲观锁c>模拟修改冲突d>乐观锁实现流程e>MyBatis-Plus实现乐观锁1. 分…

蓝牙耳机什么牌子性价比高?性价比最好的蓝牙耳机排行

近年来&#xff0c;蓝牙耳机越来越成为人们日常生活中常见的数码产品之一&#xff0c;逐渐地&#xff0c;看到更多的音频厂商、手机厂商加入蓝牙耳机市场中来。最近&#xff0c;看到很多人问&#xff0c;蓝牙耳机什么牌子性价比高&#xff1f;下面&#xff0c;我来给大家分享一…

浅谈map和unordered_map的应用场景

map和unordered_map的适用场景 底层结构介绍 map底层是红黑树结构unordered_map底层是哈希结构; Hash适用场景(unordered_map) 内存存角度来说hash因为底层维护了哈希表的存在&#xff0c;内存消耗远大于红黑树&#xff0c;但是因为哈希表增删查改时的直接映射&#xff0c…

OpenFeign服务接口调用

✨ OpenFeign服务接口调用OpenFeign & FeignFeign基本介绍OpenFeign基本介绍二者对比OpenFeign的使用新建Module&#xff1a;cloud-consumer-feign-order80pom依赖application.yml全局配置文件主启动类Service1. 业务逻辑接口FeignClient配置调用provider服务2. 新建Paymen…

第三十九讲:神州无线AC基础管理配置

瘦AP零配置上线&#xff0c;对AP的管理和配置都在AC上进行。AC的基础管理包括AC的无线地址指定及无线功能开启、AP的注册、AP用户数管理、自动信道调整等。 一、配置AC无线IP地址 设置静态的无线IP地址查看AC选取的无线IP地址3.开启无线功能 二、AP注册 1&#xff0e;二层模式…

【网络结构设计】11、E-LAN | 通过梯度传输路径来设计网络结构

文章目录一、背景二、方法2.1 网络设计策略2.2 Partial Residual Networks2.3 Cross Stage Partial Networks2.4 Efficient Layer Aggregation Network三、效果论文&#xff1a;Designing Network Design Strategies Through Gradient Path Analysis 代码&#xff1a;暂无 出…

微服务应用视角解读如何选择 K8s 的弹性策略

头&#xff1a;潘俊峰 前言 微服务架构的出现&#xff0c;拆分了庞大的单体应用&#xff0c;让业务之间的开发与协作变得更加灵活。当面临业务流量增加的场景时&#xff0c;往往需要对一些应用组件进行扩容。K8s 在应用层面提供了 HPA&#xff0c;围绕 HPA 开源社区延伸出了 …

SAP-FI模块 处理自动生成会计凭证增强

FICO-模块一. 相关问题概览1. 固定资产业务过渡科目摘要增强功能-F-022. 固定资产业务过渡科目摘要增强功能-MIGO3. 主营业务收入等科目自动反记账功能二. 问题图片描述1. 固定资产业务过渡科目摘要增强功能-F-022. 固定资产业务过渡科目摘要增强功能-MIGO3. 主营业务收入等科目…

JavaScript 作用域-作用域概述,变量作用域,作用域链

JavaScript 作用域-作用域概述&#xff0c;变量作用域&#xff0c;作用域链 目录JavaScript 作用域-作用域概述&#xff0c;变量作用域&#xff0c;作用域链1. 作用域1.1 作用域概述1.2 全局作用域1.3 局部作用域 (函数作用域)1.4 JS 没有块级作用域2. 变量的作用域2.1 变量作用…

校验和之概念、计算原理、检验原理、实例计算、代码编程,力荐力荐力荐

阅读前请看一下&#xff1a;我是一个热衷于记录的人&#xff0c;每次写博客会反复研读&#xff0c;尽量不断提升博客质量。文章设置为仅粉丝可见&#xff0c;是因为写博客确实花了不少精力。不用担心你关注我而我却不关注你&#xff0c;因为我是个诚信互关的人&#xff01;&…

如何用LightningChart创建Android图表数据可视化应用程序?(下)

LightningChart JS 是一款高性能的 JavaScript 图表工具&#xff0c;专注于性能密集型、实时可视化图表解决方案。 LightningChart .JS | 下载试用&#xff08;qun&#xff1a;740060302&#xff09;https://www.evget.com/product/4189/download 在上一篇&#xff0c;我们介…

CDN是什么?用了CDN就一定比不用更快吗?

对于开发同学来说&#xff0c;CDN这个词&#xff0c;既熟悉又陌生。 平时搞开发的时候很少需要碰这个&#xff0c;但却总能听到别人提起。 我们都听说过它能加速&#xff0c;也大概知道个原因&#xff0c;但是往深了问。 用了CDN就一定比不用更快吗&#xff1f; 就感觉有些…