git命令笔记(速查速查)

git命令功能总结

  • 1.创建git的本地仓库
  • 2. 配置本地仓库(name和email地址)
  • 3. 工作区、版本库、暂存区、对象区
    • 3.1 add, commit
    • 3.2 打印提交日志
    • 3.2 修改文件
  • 4.版本回退(git reset)
  • 5. 撤销修改(在push之前撤销)
  • 6.删除版本库中的文件
  • 7.分支管理
    • 7.1 创建分支
    • 7.2 切换分支
    • 7.3 合并操作
    • 7.4删除本地分支
    • 7.5 合并冲突
    • git log --graph 命令
    • 7.6 合并模式
    • 7.7 合并(修bug)模式
    • 7.8 功能取消了!(删除分支)
  • 8.远端仓库
    • 8.1 克隆
    • 8.2 提交到远端(本地新,远程仓库旧)
    • 8.3 拉取远程仓库(本地旧,远程仓库新)
  • 9. <<.gitignore文件>>
  • 10. 给命令取别名
  • 11. 标签管理
    • 11.1 打标签
    • 11.2 删除标签
    • 11.3 将本地标签推送到远程仓库
    • 11.4 删除标签
  • 12. 和远程仓库有关的命令
    • 12.1 查看远程仓库有哪些分支
    • 12.2 在本地和远程仓库的分支建立连接
    • 12.3 将远程的dev合并到远程的master分支
    • 12.4 远端如果没有自己创建的dev分支怎么办?
    • 12.5 本地只有dev分支和master分支,远端有dev1,dev2等分支,现在要在dev2上开发,怎么办?
    • 12.6 有两个人分别在feature-1和feature-2上开发,怎么办呢?
    • 12.7 删除远程分支
  • 13. **注意事项**

1.创建git的本地仓库

git init

运行完之后就会出现了一个.git的隐藏目录(用来追踪和管理仓库的文件数据),代表初始化完毕。

2. 配置本地仓库(name和email地址)

  • 设置命令
git config user.name "xxx"
git config user.email "123456@qq.com"
  • 查看命令
git config -l

在这里插入图片描述

  • 重置配置
git config --unset user.name 
git config --unset user.email 

在这里插入图片描述

  • 全局配置和删除(生效在该机器所有git仓库中)
git config --global user.name "xxx"
git config --global user.email "123456@qq.com"
git config --global --unset user.name 

3. 工作区、版本库、暂存区、对象区

在这里插入图片描述
图中左侧为工作区,右侧为版本库。在版本库中标记为“index”的区域是暂存区(stage,index),标记为"master”的是 master 分支所代表的目
录树。标记为”objects“的是对象区。

3.1 add, commit

  • 当对工作区修改(或新增)的文件执行 “git add” 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。

  • 当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。

git add <文件名1> <文件名2>
git commit -m "备注信息"

3.2 打印提交日志

  • 查看git提交日志信息
git log
git reflog    //查看每次提交的日志

在这里插入图片描述

  • 每个日志只打印一行
git log --pretty=oneline
  • 在我们执行完add、commit之后,.git隐藏目录会出现如下信息字符串,这些字符串记录着我们修改的日志:
    在这里插入图片描述
    可以使用如下命令查看这些字符串的内容代表什么!
git cat-file -p 0e6b1780b73cd9220ec5073dc64b42f7ad4bd945

其中master使用cat查看就可以了。
其中HEAD指向的是master,然后master里面存的是最新一次提交的id字符串!

3.2 修改文件

  • 查看当前仓库状态
git status

在这里插入图片描述
表示当前在暂存区没有修改的文件(连add都没有,更别说commit了),只是在工作区修改了。

-查看该文件到底修改了什么内容

git diff <文件名>

在这里插入图片描述

因为当前目录只是在工作区修改的,所以执行add后再看看status:
在这里插入图片描述
commit后再看看status:
在这里插入图片描述

4.版本回退(git reset)

git reset本质是回退版本库的内容,工作区和暂存区会不会退,具体看reset后面的参数(soft、mixed、hard)

 git reset [--soft | --mixed | --hard] [HEAD]

在这里插入图片描述
git reset的参数:

  • –soft 只回退版本库中的内容,对于暂存区和工作区不回退。
  • –mixed 回退版本库和暂存区的内容,不回退工作区。(默认选项)
  • –hard回退所有区域的内容。(慎用)

5. 撤销修改(在push之前撤销)

git checkout -- <filename>

在这里插入图片描述
描述xxxcode是已经修改了的内容:

  • 第一种情况是只在工作区修改了,如何撤销?
git checkout -- <filename> 

这样工作区的文件回到最近一次add/commit时的状态。

  • 第二种情况是工作区暂存区都改了,如何撤销这次操作呢?
#修改namefile到当前版本
# HEAD当前版本
# HEAD^上一个版本
git reset --mixed HEAD <namefile>

mixed将暂存区和版本库都修改了,所以此时就回到了情况1的场景,这样再运行checkout --就可以了。需要两步。 如何使用–hard选项就只需要一步,因为三个位置都到当前版本了。

  • 第三种情况就是全部修改了,如何撤销呢?
#回退到上一个版本HEAD^
# 全部回退hard
git reset --hard HEAD^

6.删除版本库中的文件

git add 本质上是提交修改(告诉哪个文件修改了),并不是添加文件。

  • 普通版
rm <namefile>  
git add <namefile> #提交修改
git commit -m "delete namefile"
  • 简化版
git rm <namefile>  #删除工作区和暂存区的文件
git commit -m "delete namefile"   #在版本库也删除

7.分支管理

  • 查看本地当前有哪些分支(master分支只要创建了就会有)
  • HEAD一般来说指向master
git branch 

7.1 创建分支

  • 创建一个dev分支
git branch dev

在这里插入图片描述

在这里插入图片描述
示意图:
在这里插入图片描述

7.2 切换分支

  • 切换到dev分支
git checkout dev

在这里插入图片描述

示意图:
在这里插入图片描述


并且在dev分支commit之后,指针变化如图所示:
在这里插入图片描述

7.3 合并操作

将dev分支合并到master分支上,也就是让master也显示dev上更改的内容

  • 先切换到master分支上,然后执行合并命令
git checkout master
git merge dev

示意图如下:
在这里插入图片描述

7.4删除本地分支

只能在其他分支上删除dev(不能自己删除自己)

 git branch -d dev

在这里插入图片描述

7.5 合并冲突

创建并切换到dev分支

git branch -b dev

在这里插入图片描述

  • 如图场景所示:之前文件的内容是aaa,我在dev分支将aaa修改为ccc,在master将aaa修改为bbb,然后在master执行merge时,就会发生merge error。如下图
    在这里插入图片描述

  • 出错后,需要先fix冲突,然后再次将文件add和commit即可。
    在这里插入图片描述

  • 因为git不知道我们到底是需要ccc版本的还是需要bbb版本的,因此需要我们自己在ReadMe文件里面选择,=上面的是HEAD分支上的,下面是dev1分支上的,保留哪个删除哪个即可。下面是只保存bbb的代码(其他的全删除即可)。
    在这里插入图片描述
    然后再执行add 和 commit 之后再次merge即可!

示意图如图所示:在这里插入图片描述

git log --graph 命令

graph是图形化分支的操作,然后abbrev-commit简化commit的字符串。

git log --graph --abbrev-commit

如下图,最左边的图,表示了我们分支创建和合并的基本过程
在这里插入图片描述

7.6 合并模式

不使用Fast-Forward模式(我们要看到合并的示意图):

  • 告诉git合并时不使用 noff模式,但是此时master没有修改,因此需要commit一下,再往前走一步。
git merge --no-ff -m "merge with --no-ff" dev

7.7 合并(修bug)模式

场景:主分支master、dev开发分支。突然说master上有bug需要修一下。

  1. 如果当时在dev分支上进行开发,先运行stash保存一下代码。(防止dev写的代码出现在master上)。
git stash
  1. 然后就可以切到master分支上
git checkout master
  1. 在master创建一个bug分支修复bug
git checkout -b fix-bug
  1. 修复完成后 add 和commit
git add .
git commit -m "fix_bug"
  1. 将修改好的代码合并到master里面(切换到master并merge)
git checkout master
git merge --no-ff -m "merge fix_bug" fix-bug
  1. bug修复完了,接着回dev进行开发。
git checkout dev
  1. 将存储区里的代码恢复出来
git stash pop
git stash list #查看当前存储了哪些内容
  1. 开发完成后要add,commit
git add .
git commit -m "code finish!"

9.写完功能后dev要合并到master上(但是master上已经进行bug修改过了,已经不一样了),所以建议先将master合并到dev上,修改没问题后再。用merge合并dev这样就不会影响到master上的代码。

git merge --no-ff "merge master" master  
# 然后手动去解决冲突
git add .
git commit -m "sove conflict"
# 再切换到master上,合并dev
git checkout master
git merge --no-ff -m "merge dev2" dev

在这里插入图片描述
在这里插入图片描述

7.8 功能取消了!(删除分支)

正常来说删除分支的操作是git branch -d dev即可解决。能够i执行这个的前提条件是该dev已经merge过了。删了也无所谓。

但是如果一些功能我们已经开发好久了,产品经理说这个功能取消了,这个我们就并没有merge过,使用-d就删不掉了。因为git不想让你这样删掉分支(写的代码就全没了)。
但是确实是不需要这些代码了。所以执行git branch -D dev强制删除。

在这里插入图片描述

8.远端仓库

简单理解就是根据 本地的master和远程仓库的master分支如果建立起了联系,我们就可以使用相关命令去推送了。
使用git remote查看远程仓库名
使用git remote -v看更详细的信息和权限。
在这里插入图片描述

8.1 克隆

使用git clone url去克隆远程仓库到本地。

git clone url 

如果是自己的仓库,别忘记使用git config -l查看配置项,如果不是远端的地址,需要使用第二节的内容配置好,name是昵称。email是仓库绑定的邮箱。

8.2 提交到远端(本地新,远程仓库旧)

新建文件后,先add 然后 commit 之后。

git push <远程仓库> <本地分支>:<远端分支>
git push origin master:master

如果本地分支和远程仓库的分支一样可以使用git push origin master 来省略一个master。

8.3 拉取远程仓库(本地旧,远程仓库新)

pull : 拉取+合并

git pull <仓库名> <远程分支名>:,本地分支名>
git pull orgin master:master

如果本地分支和远程仓库的分支一样可以使用git pull origin master 来省略一个master。

9. <<.gitignore文件>>

忽略以.so和.init为结尾的文件。但是不包括c.so文件。
在这里插入图片描述
虽然被忽略了,但是使用git add -f a.so可以把a.so文件强制添加到版本库中。但是不推荐使用。

  • 有时候我们不知道a.so文件是否被忽略了。可以执行如下命令去检查:
git check-ignore -v a.so 

然后会告诉你在.gitignore的第3行位置已经被忽略了.
在这里插入图片描述
.*忽略所有以.开头的文件,但是记得要把ignore文件添加进去哦

10. 给命令取别名

就是简化命令的操作。
使用git config--global alias.st 命令
给一个命令取了别名st。
注意如果是好多命令,要加’'单引号给引起来。

git config --global alias.st status
git config --global alias.lpa 'log --pretty=oneline --abbrev-commit'

分别起了st和lpa两个别名。

11. 标签管理

commit id 非常难记,因此标签就相当于域名,简化我们记忆。

11.1 打标签

  • 给最新一次提交打标签
git tag <标签名>
git tag v1.0
  • 查看所有标签
git tag
  • 给指定提交打标签(需要拿到commit id)
# 拿到commit id
git log --pretty=oneline --abbrev-commit # 给指定Id  打标签
git tag v0.2 <id>
  • 查看标签详细信息
git show <标签名>
git show v1.0
  • 创建带有说明的标签
git tag -a <标签名> -m "xxx" <ID>

11.2 删除标签

删除标签 git tag -d <标签名>

11.3 将本地标签推送到远程仓库

  • 推送指定标签
git push origin <标签名> 
  • 推送所有标签
git push origin --tags

11.4 删除标签

不建议直接在远程仓库删除

  • 先将本地标签删除,再通过push方式删除远端。
git tag -d <标签名>
git push origin :<标签名>

12. 和远程仓库有关的命令

12.1 查看远程仓库有哪些分支

git branch -r    
git branch -a    #既看本地的又看远程的

12.2 在本地和远程仓库的分支建立连接

自己本地没有dev而远端有dev。这时候pull之后,需要自己本地再次建立一个dev分支,然后和远端建立连接,这样push,pull操作可以直接简化使用了。

git checkout -b dev origin/dev

这样本地dev和远端dev直接建立连接了。

  • 如何查看是否建立起链接呢?
git branch -vv
  • 如何在dev创建完了,没有发生链接呢?如何补救
git branch --set-upstream-to=origin/dev dev

这样就可以是远程的dev分支和本地的dev链接起来了。

12.3 将远程的dev合并到远程的master分支

  • 使用PR表单(省略)
  • 本地merge操作后再推送到远程(前面写过)
    1.先git checkout master切换到master分支
    2.保持master最新git pull
    3.再切换到devgit checkout dev
    4.合并master到devgit merge master,然后解决冲突(完了之后add commit)
    5.切换到master并且合并dev分支git checkout master并且git merge dev因为我们第4步已经解决冲突了,所以第5步不需要解决冲突
    6.推送master到远端仓库自动合并git push

12.4 远端如果没有自己创建的dev分支怎么办?

使用git push origin dev即可推送上去,并且在远端自动建立一个dev分支。

12.5 本地只有dev分支和master分支,远端有dev1,dev2等分支,现在要在dev2上开发,怎么办?

  • 使用git pull即可
    功能1:拉取建立分支的详细内容(需要先建立链接)
    功能2:拉去仓库的所有分支(可以获得dev2,dev3等)

分支拉取下来了之后,和远端建立链接,然后再开发即可。

12.6 有两个人分别在feature-1和feature-2上开发,怎么办呢?

为了防止污染master都建议先自己合并master再让master合并自己即可。
在这里插入图片描述

12.7 删除远程分支

远程仓库的分支已经被删除了,但是本地仍然存在。如何删除本地的远程分支呢?
先使用git branch -a查看所有分支。
使用git remote show origin查看origin仓库的所有远程分支
在这里插入图片描述
可以看出git提示我们有些分支已经stale了,表示很陈旧了。
使用git remote prune即可删除本地里面的远程分支。

13. 注意事项

  • 远程仓库的分支和本地仓库的分支并不是同一个分支,可以这么理解,虽然分支名字相同,但是没有任何联系,相当于不同文件夹下的同名目录。 但是我们可以通过建立链接操作,将本地分支和远程仓库分支联系起来,这样两个分支其实就有了桥梁,就可以互通了。

  • 对于任何的远程操作,本地修改后,都要先进行add和commit命令,提交到版本库,让git追踪到,才能进行push合并等操作。

经验有限,后续会持续添加注意事项…

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

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

相关文章

SQL Injection | SQL 注入分类 —— 查询方式

关注这个漏洞的其他相关笔记&#xff1a;SQL 注入漏洞 - 学习手册-CSDN博客 在进行 SQL 注入攻击时&#xff0c;如果目标服务器的后端 SQL 查询不返回任何结果&#xff08;即无回显&#xff09;&#xff0c;我们可能需要采用 SQL 盲注技术来进行进一步的测试。盲注是一种在无法…

SSM框架学习(七、MyBatis-Plus高级用法:最优化持久层开发)

目录 一、MyBatis-Plus快速入门 1.简介 2.快速入门 二、MyBatis-Plus核心功能 1.基于Mapper接口CRUD &#xff08;1&#xff09;Insert 方法 &#xff08;2&#xff09;Delete方法 &#xff08;3&#xff09;Update 方法 &#xff08;4&#xff09;Select方法 2.基于Serv…

用PHP写一个EACO(drc20)写一个和狗狗币,比特币,avax, bnb,eth,sol,usdt,等全球前30大数字货币的兑换去中心化小程序。

创建一个简单的PHP小程序&#xff0c;用于EACO&#xff08;DRC20&#xff09;与全球前30大数字货币&#xff08;如狗狗币、比特币、AVAX、BNB、ETH、SOL、USDT等&#xff09;进行去中心化兑换的功能&#xff0c;需要集成加密货币的API接口来获取实时汇率和执行兑换操作。以下是…

Chrome DevTools 三: Performance 性能面板扩展—— 性能优化

Performance 性能 &#xff08;一&#xff09;性能指标 首次内容绘制 (First Contentful Paint&#xff0c;FCP)&#xff1a; 任意内容在页面上完成渲染的时间 最大内容绘制 (Largest Contentful Paint&#xff0c;LCP)&#xff1a; 最大内容在页面上完成渲染的时间 第一字节…

《中国结算全国股份转让系统—结算参与人数据接口规范》

《中国结算全国股份转让系统—结算参与人数据接口规范》 本文档在原《中国结算全国股份转让系统结算参与人数据接口规范&#xff08;Ver1.2&#xff09;》基础上&#xff0c;依据《关于通过中国结算缴纳身份验证费的业务说明》、《关于通过中国结算缴纳手机号码核查费的业务说明…

283.移动零

目录 题目解法解释&#xff1a; .reverse()怎么用的&#xff1f;Char 13: error: no matching function for call to reverse 什么是双指针&#xff1f;双指针的常见类型&#xff1a;总结&#xff1a; 题目 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末…

【Java函数篇】Java8中的Lambda表达式实战详解

文章标题 什么是lambda表达式Lambda表达式示例Lambda表达式特点更多实战案例场景1&#xff1a;使用 lambda 表达式迭代列表并对列表项执行某些操作场景2&#xff1a;使用 lambda 表达式在 Java 中创建并启动线程场景3&#xff1a;使用 lambda 表达式向 GUI 组件添加事件监听器 …

88.【C语言】文件操作(5)

目录 文件的随机读写 1.fseek函数 代码示例 运行结果 2.ftell函数 代码示例 运行结果 3.rewind函数 代码示例 运行结果 承接79.【C语言】文件操作(4)文章 文件的随机读写 1.fseek函数 声明:int fseek ( FILE * stream, long int offset, int origin ); 格式:fsee…

APM 3.0.0|二次元味很冲的B站音乐软件

APM是一款专为B站音频设计的第三方播放器&#xff0c;支持从B站获取音频内容&#xff0c;提供桌面小组件&#xff0c;多语言支持&#xff0c;以及针对Android系统的优化。下载安装APK后打开应用&#xff0c;登录B站账号&#xff0c;浏览并播放音频内容。 大小&#xff1a;73M …

13分+文章利用scRNA-Seq揭示地铁细颗粒物引起肺部炎症的分子机制

写在前面 人们乘坐地铁时&#xff0c;不可避免地在地铁站台上吸入细颗粒物&#xff08;PM2.5&#xff09;&#xff0c;但PM2.5对人体又有哪些危害呢&#xff0c;今天和大家分享一篇文章&#xff0c;题目为“单细胞转录组学揭示吸入地铁细颗粒物引起的肺部炎症”&#xff0c;作…

Android:加载三方应用的小部件到自己APP显示

两种方式&#xff1a; 1、自己加载小部件列表做选择要显示的小部件 2、调用系统的弹窗做选择要显示的小部件 直接贴代码&#xff1a; public class TempActivity extends FragmentActivity {private ActivityTempBinding viewBinding;private AppWidgetManager appWidgetMa…

私域卖货难点如何解决

明确了品牌卖货的本质&#xff0c;我们来看一下私域品牌的卖货难点如何解决。 一、产品层面 想要提高卖货效率&#xff0c;第一步就是打造产品竞争力。产品竞争力的打造主要在于两点&#xff1a;市场调研和定期更新迭代&#xff0c;其中定期更新迭代则是打造产品竞争力的核心环…

《AI生成式工具使用》之:AI文本生视频(二战!)

目录 背景说明及目标 尝试练手 1、豆包AI之图片生成 总结&#xff1a;豆包AI生成的图片&#xff0c;不太能看细节&#xff0c;涉及到中文的基本上不能细看都是类似乱码的东西&#xff0c;有明显的逻辑性问题&#xff08;比如不符合道路交规&#xff09;。需要根据生成的结果…

超越 React Query:探索更高效的数据请求策略

你好&#xff0c;开发者们&#xff01; 在前端开发的海洋中&#xff0c;我们常常遇到组件间通信的难题。你是否也曾为如何优雅地在组件间传递信息而头疼&#xff1f;今天&#xff0c;我想和大家分享一个让我眼前一亮的解决方案——使用 alova。 跨组件触发请求的挑战 想象一…

Java-继承与多态-上篇

关于类与对象&#xff0c;内容较多&#xff0c;我们分为两篇进行讲解&#xff1a; &#x1f4da; Java-继承与多态-上篇&#xff1a;———— <就是本篇> &#x1f4d5; 继承的概念与使用 &#x1f4d5; 父类成员访问 &#x1f4d5; super关键字 &#x1f4d5; supe…

Windows设置程序开机自启动的几种方法

1. 使用“启动”文件夹 Windows 有一个专门的“启动”文件夹&#xff0c;所有放在这个文件夹中的程序都会在系统启动时自动运行。 步骤&#xff1a; 按下 Win R&#xff0c;输入 shell:startup&#xff0c;并按下回车。 在弹出的启动文件夹中&#xff0c;将你想要开机自启动…

laravel 查询数据库

数据库准备 插入 三行 不同的数据 自行搭建 laravel 工程 参考 工程创建点击此处 laravel 配置 数据库信息 DB_CONNECTIONmysql #连接什么数据库 DB_HOST127.0.0.1 # 连接 哪个电脑的 ip &#xff08;决定 电脑 本机&#xff09; DB_PORT3306 # 端口 DB_DATABASEyanyu…

PostgreSQL模板数据库template0和template1的异同点

PostgreSQL模板数据库 PostgreSQL有两个模板数据库&#xff1a;template0和template1&#xff0c;template0是不可修改的&#xff0c;而template1是可以修改的。 那模板数据库有什么作用呢&#xff1f;顾名思义&#xff0c;当做模板。 其实我们创建数据库 CREATE DATABASE 其…

【记录】VSCode|自用设置项

文章目录 1 基础配置1.1 自动保存1.2 编辑区自动换行1.3 选项卡换行1.4 空格代替制表符1.5 开启滚轮缩放 2 进阶设置2.1 选项卡不自我覆盖2.2 选项卡限制宽度2.3 选项卡组限制高度2.4 字体设置2.5 字体加粗2.6 侧边栏2.7 沉浸式代码模式 Zen Mode2.8 设置 Zen 模式的选项卡组 3…

filebeat接入nginx和mysql获取日志

下载nginx &#xff08;1&#xff09; 直接下载 yum install nginx -y&#xff08;2&#xff09;查看状态启动 systemctl start nginx systemctl status nginx&#xff08;3&#xff09;配置文件检查 nginx -t&#xff08;4&#xff09;端口检查 netstat -tulpn | grep :80&am…