用好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 分钟前
二、React入口文件(main.jsx)
前端·react.js
艾莉丝努力练剑9 分钟前
【AI接入大模型SDK】ChatSDK示例验证
人工智能·学习·面试·大模型·sdk
To_OC5 小时前
跑了3个Docker容器后,我终于搞懂镜像和容器到底啥关系
后端·docker·容器
东风破_5 小时前
Docker 基础:为什么需要容器?
前端·后端·nginx
东风破_5 小时前
Docker 实战:使用 Nginx 作为容器入口代理 Node 服务
前端·后端·nginx
Lyyaoo.6 小时前
Spring Boot Validation 声明式参数校验
spring boot·后端·mysql
剩下了什么6 小时前
float32 与 float64 精度陷阱:如何在 Go 中避免错误使用
开发语言·后端·golang
你别说话了6 小时前
Vue项目解决跨域
前端·javascript·vue.js
Rain的Java大神之路6 小时前
介绍一下分布式事务
java·分布式·后端·spring·spring cloud·架构·springcloud
唐青枫7 小时前
http-server:别再双击 index.html,一条命令把目录变成网站
前端·javascript