用好git的几个命令,领导都夸你干的好~

在日常开发过程中,我们经常会遇到需求频繁变动或在提交commit后发现Bug,这通常需要再次进行git commit,从而导致提交日志变得杂乱无章。不过,幸运的是,Git 内部提供了一系列操作命令,可以有效地解决这一问题,使提交日志保持清晰有序。

修改最近一次提交的内容 git commit --amend

用于修改最近一次提交的内容。这个命令允许你更改最后一次提交的提交信息,或者添加一些文件到这个提交中,甚至可以用来修改已经提交到暂存区的文件内容。

主要用途:

比如代码刚提交,发现对应的commit提交模块重复出现了Bug,这时如果新建一个提交去提交此Bug那么后续一个模块可能会产生多个冗余commit, 不利于查找。

用法也比较简单:

终端敲击 git commit --amend,弹出以下修改窗口(修改后的文件需要重新 git add .,把它添加到工作区),会出现以下界面

界面操作跟VI操作命令一致 (i: 编辑,shift + : (输入操作命令) wq(保存),q!(忽略关闭)) ,修改完保存之后,执行git push -f(此时确保你的提交commit是最新,如有同事提交新的commit,此命令会覆盖对方提交commit)

不同分支之间的挑选合并 git cherry-pick

允许我们从一个分支中选择特定的commit,并将其应用到另一个分支上,而无需合并整个分支。

主要用途:

比如一个项目多个不同版本的分支,当某个分支里的某些commit模块上的功能需要被另外一个分支合并,那么git cherry-pick将会很适合你

如下用法:

记录合并目标分支的commit id(多个commit id用空格隔开就行),切换到当前分支,执行git checkout-pick,选择性的合并

执行成功后,然后再git push 推送到仓库里。

有些宝子们可能会出现冲突的情况,首先我们手动把冲突解决了(merge, rebase)都可以,解决完之后,我们执行git add .,添加解决后的文件到暂存区,然后再继续执行git cherry-pick --continue,继续我们的合并过程, 如果想要取消并返回之前的状态则执行git cherry-pick --abort

使用cherry-pick时,有两个点需要注意下,可能会影响到commit tree

  1. 提交哈希值的变化:使用cherry-pick操作后,即使内容相同,新的提交的哈希值也会与原始提交不同,因为它是一个全新的提交。

  2. 提交历史的分叉: 使用cherry-pick命令可能会导致提交历史出现分叉,因为新的提交与原提交的哈希值不同。

临时保存当前工作目录和暂存区的修改 git stash

用于临时保存当前工作目录和暂存区的修改(包括未跟踪的文件或更改),以便清理工作目录,同时不丢失这些修改。

主要用途:

比如你正在开发某个模块,产品同志跑过来说,优先处理这个紧急需求,这时候你盯着暂缓区的修改文件时,就该用git stash这个命令。

用法如下:

如果不需要特别去记录某个提交记录,则直接执行git stash,否则执行git stash save "你的信息"

如果你想要知道你的工作区究竟存了几个stash,则执行git stash list 这个命令可以查看所有stash,而且每个 stash 条目都有一个唯一的标识符(如 stash@{0}

然后你就可以执行git stash apply stash@{n}(n是索引前缀)应用其中一条stash

如果你只需要存一会,然后改完提交再拿下来并删除,那么只需git stash pop执行这个命令(实际上这个命令最常用),同理后缀加上stash@{0} 也是删除并恢复。

如果只需要删除某个stash的话,执行git stash drop stash@{n},清空则是git stash clear

掌握上述几个git操作的用法确实能大大提高我们的开发效率,尤其是分支功能迁移、减少多个冗余commit,让你的commit tree看起来更简洁,更干净,分叉更少!

相关推荐
浪浪山小白兔1 分钟前
HTML 表单和输入标签详解
前端·html
代码驿站5201 分钟前
JavaScript语言的软件工程
开发语言·后端·golang
helianying552 分钟前
AI赋能零售:ScriptEcho如何提升效率,优化用户体验
前端·人工智能·ux·零售
Archy_Wang_142 分钟前
ASP.NET Core 中的 JWT 鉴权实现
后端·ui·asp.net
Archy_Wang_11 小时前
ASP.NET Core中 JWT 实现无感刷新Token
后端·asp.net
Nickyang1 小时前
如何用Trae打造一键登录神器?Chrome插件开发实战
前端·javascript·trae
逆旅行天涯1 小时前
【vitePress】基于github快速添加评论功能(giscus)
前端·github
m0_748230941 小时前
SpringBoot实战(三十二)集成 ofdrw,实现 PDF 和 OFD 的转换、SM2 签署OFD
spring boot·后端·pdf
好像是个likun1 小时前
spring Ioc 容器的简介和Bean之间的关系
java·后端·spring
我有一棵树1 小时前
style标签没有写lang=“scss“引发的 bug 和反思
前端·bug·scss