git命令的进阶和复习(带动图效果)
wptr33 2024-11-06 20:33 29 浏览
码个蛋(codeegg) 第 974 次推文
作者:老郑的技术杂货铺链接:https://juejin.im/post/5e9e49356fb9a03c917fe7fd
1. 学习途径
个人学习途径主要以下几个:
learnGit在线学习
猴子都能懂的git
小姐姐用动画图解Git
个人比较推荐第二个Git学习网站猴子都能懂的git,图文结合,简单明了,本文将介绍一些常用 Git 指令,作为一个学习总结
git rebase
git merge
git reset
git revert
git cherry-pick
git fetch
git pull
git reflog
2. 分支的合并(merge)
对于merge而言,又有两个合并策略:
fast-forward
no-fast-forward
假设bugfix分支是从master分支分叉出来的,以这个图作为初始分支状态
2.1 fast-forward
git merge默认采用fast-forward的方式,执行git merge等同于执行git merge --ff
,–ff是fast-forward的简写。特点:
快进操作:只更新指针的指向,不会创造一个新的commit节点。
缺点:一旦删除分支或者分支指针往前走,会丢掉分支信息(原来这个分支的做了什么在log中体现不出来)
触发时机:合并 bugfix分支到master分支时,如果master分支的状态没有被更改过,这样的合并被称为fast-forward(快进)合并
2.2 no-fast-forward
--no-ff 指的是强行关闭fast-forward方式,使得每一次的合并都创建一个新的commit记录。完整的命令如下
//即在合并分支命令加入 --no-ff 后缀的方式运行
$ git merge --no-ff -m "merge with no-ff" dev
如何设置默认为no-fast-forward模式
//第一种方案:全局设置禁用fast-forward
git config --global --add merge.ff false
//第二种方案:某个分支单独禁用fast-forward
git config branch.【分支名】.mergeoptions "--no-ff"
触发时机:比如master分支的历史记录有可能在bugfix分支分叉出去后有新的更新。
此时如果把bugFix合并到master,合并两个修改会生成一个提交。这时,master分支的HEAD会移动到该提交上。
3. 变基(rebase)
reabse和merge其实都可以看作为合并操作,rebase 的优势就是可以创造更线性的提交历史,还是以这张图为列
执行以下命令:
//rebase bugfix分支到master分支
? ~ git:(master) ? git rebase bugfix
现在 bugFix 分支上的工作在 master 的最顶端,同时我们也得到了一个更线性的提交序列。rebase之后,唯一的问题就是 master的HEAD位置还没有更新。所以需要【将master的HEAD移动到bugfix的HEAD】
~ git:(bugFix) ? git checkout master
~ git:(master) ? git merge bugFix 或者git rebase bugFix
由于篇幅原因,有兴趣的可以在了解下交互式变基,交互式变基修改commit,如commit的合并、顺序调整、commit的提交日志修改。
4. 重置(reset)
撤销变更方式有两种。其中一种就是git reset(控制当前分支回撤到某次提交时的状态。),这个部分这篇文章小姐姐用动画图解Git讲的相对好一些
4.1 软重置
最大的特点:撤回到特定提交之后,已有的修改会保留
以下图为例:9e78i 提交添加了 style.css 文件,035cc 提交添加了 index.js 文件。使用软重置,我们可以撤销提交记录,但是保留新建的 style.css 和 index.js 文件。
4.2 硬重置
最大的特点:无需保留提交已有的修改,直接将当前分支的状态恢复到某个特定提交下,,硬重置还会将当前工作目录(working directory)中的文件、已暂存文件(staged files)全部移除
使用 git status 查看,发现当前操作空间空空如也。Git 丢弃了 9e78i 和 035cc 两次提交引入的修改,将仓库重置到 ec5be 时的状态
5. 还原(revert)
虽然在你的本地分支中使用 git reset 很方便,但是这种“改写历史”
的方法对大家一起使用的远程分支是无效的,所以要使用revert
最大的特点:用于还原某次提交的修改时,会创建一个包含已还原更改的 新提交记录
比如:我们在 ec5be 上添加了 index.js 文件。之后发现并不需要这个文件,可以执行git revert ec5be
指令还原之前的更改
新的提交记录 9e78i 还原了 ec5be 引入的更改。git revert 可以在不修改分支历史的前提下,还原某次提交引入的更改
6. 检出提交(cherry-pick)
如果某个分支上的某次提交的修改正是当前分支需要的,那我们可以使用 git cherry-pick
命令检出某次的提交更改,作为新的提交添加到当前分支上面
//命令形式为:
git cherry-pick <提交号>...
比如:dev 分支上的 76d12 提交添加了 index.js 文件,我们需要将本次提交更改加入到 master 分支,那么就可以使用 git cherry-pick 76d12
单独检出这条记录修改。
7 git fetch
比如:你和你的同事在master分支上工作,如果你的同事将他做的更改提交到了远程分支上(orgin/master
),而这些提交是你本地没有的,此时,就要使用git fetch
指令将远程分支上的最新的修改下载下来
git fetch 指令并没有影响本地分支,即head指针位置未改变
8. 拉取(pull)
git pull
指令实际做了两件事:git fetch
和git merge
这里,相当于在get fetch基础上,移动了Head指针
。这里就不具体阐述了
9. Reflog
git reflog 是一个非常有用的命令,用于显示所有已执行操作的日志!包括合并、重置、还原:基本上记录了对分支的任何更
使用场景:假设你不小心使用 git reset 命令硬重置仓库到某个提交。后面突然想到,重置导致了一些已有的正常代码的误删
demo 我们不想合并 origin/master 分支了。执行 git reflog 命令,我们看到合并之前的仓库状态位于 HEAD@{1} 这个地方,我们使用 git reset 指令将 HEAD 头指向 HEAD@{1}
10. 补充
10.1 commit --amend
可以更新先前的commit的提交信息,并且本地仓库中并不会产生一个新的commit
10.2 squash merge
可能你遇到过想要合并多个 commit 为一个,这时候就可以用squash merge
把某个分支上的所有提交都合并成一个提交
git merge --squash 分支名
如果郭德纲是个互联网人
仿小红书长图片自动循环滚动效果实现 (附完整源码)
读书能享受到时间的复利吗
你有没有总结过这些命令?
相关推荐
- Linux文件系统操作常用命令(linux文件内容操作命令)
-
在Linux系统中,有一些常用的文件系统操作命令,以下是这些命令的介绍和作用:#切换目录,其中./代表当前目录,../代表上一级目录cd#查看当前目录里的文件和文件夹ls#...
- 别小看tail 命令,它难倒了技术总监
-
我把自己以往的文章汇总成为了Github,欢迎各位大佬star...
- lnav:基于 Linux 的高级控制台日志文件查看器
-
lnav是一款开源的控制台日志文件查看器,专为Linux和Unix-like系统设计。它通过自动检测日志文件的格式,提取时间戳、日志级别等关键信息,并将多个日志文件的内容按时间顺序合并显示,...
- 声明式与命令式代码(声明模式和命令模式)
-
编程范式中的术语和差异信不信由你,你可能已经以开发人员的身份使用了多种编程范例。因为没有什么比用编程理论招待朋友更有趣的了,所以这篇文章可以帮助您认识代码中的流行范例。命令式编程命令式编程是我们从As...
- linux中的常用命令(linux常用命令和作用)
-
linux中的常用命令linux中的命令统称shell命令shell是一个命令行解释器,将用户命令解析为操作系统所能理解的指令,实现用户与操作系统的交互shell终端:我们平时输入命令,执行程序的那个...
- 提高工作效率的--Linux常用命令,能够决解95%以上的问题
-
点击上方关注,第一时间接受干货转发,点赞,收藏,不如一次关注评论区第一条注意查看回复:Linux命令获取linux常用命令大全pdf+Linux命令行大全pdf...
- 如何限制他人操作自己的电脑?(如何控制别人的电脑不让发现)
-
这段时间,小猪罗志祥正处于风口浪尖,具体是为啥?还不知道的小伙伴赶紧去补一下最近的娱乐圈八卦~简单来说,就是我们的小罗同事,以自己超强的体力,以及超强的时间管理能力,重新定义了「多人运动」的含义,重新...
- 最通俗易懂的命令模式讲解(命令模式百科)
-
我们先不讲什么是命令模式,先通过一个场景来引出命令模式,看看命令模式能解决什么样的问题。现在有一个渣男张三,他有还几个女朋友,你现在是不是还是单身狗,你就说你气不气?然后他需要每天分别叫几个女朋友起床...
- 互联网大厂后端必看!Spring Boot 中Runtime执行与停止命令?
-
你是否曾在使用SpringBoot开发项目时,遇到需要执行系统命令的场景?比如调用脚本进行文件处理,又或是启动外部程序?很多后端开发人员会使用Processexec=Runtime.get...
- Linux 常用命令(linux常用的20个命令面试)
-
日志排查类操作命令...
- Java字节码指令:if_icmpgt(0xA3)(java字节码使用的汇编语言)
-
if_icmpgt是Java字节码中的一条条件跳转指令,其全称是"IfIntegerCompareGreaterThan"。它用于比较两个整数值的大小。如果栈顶的第一个...
- 外贸干货|如何增加领英的曝光量和询盘
-
#跨境电商#...
- golang执行linux命令(golang调用shell脚本)
-
需求需要通过openssl生成rsa秘钥,然后保存该秘钥。代码实例packagemainimport("io/ioutil""bytes"&...
- LINUX磁盘挂载(linux磁盘挂载到windows)
-
1、使用root用户查看磁盘挂载情况:fdisk-l2、使用df查看当前磁盘挂载情况,根据和fdisk-l的结果进行对比,查看还有那些磁盘未使用3、挂载:mount磁盘挂载路径...
- Linux命令学习——nl命令(linux ln命令的使用)
-
nl命令主要功能为每一个文件添加行号,每一个输入的文件添加行号后发送到标准输出。当没有文件或文件为-时,读取标准输入...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
因果推断Matching方式实现代码 因果推断模型
-
git pull命令使用实例 git pull--rebase
-
面试官:git pull是哪两个指令的组合?
-
git 执行pull错误如何撤销 git pull fail
-
git fetch 和git pull 的异同 git中fetch和pull的区别
-
git pull 和git fetch 命令分别有什么作用?二者有什么区别?
-
git pull 之后本地代码被覆盖 解决方案
-
还可以这样玩?Git基本原理及各种骚操作,涨知识了
-
git命令之pull git.pull
-
- 最近发表
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)