用好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看起来更简洁,更干净,分叉更少!

相关推荐
Vitalia36 分钟前
从零开始学 Rust:基本概念——变量、数据类型、函数、控制流
开发语言·后端·rust
whisperrr.2 小时前
【JavaWeb12】数据交换与异步请求:JSON与Ajax的绝妙搭配是否塑造了Web的交互革命?
前端·ajax·json
烂蜻蜓2 小时前
前端已死?什么是前端
开发语言·前端·javascript·vue.js·uni-app
猎人everest3 小时前
SpringBoot应用开发入门
java·spring boot·后端
谢尔登4 小时前
Vue 和 React 的异同点
前端·vue.js·react.js
祈澈菇凉8 小时前
Webpack的基本功能有哪些
前端·javascript·vue.js
小纯洁w8 小时前
Webpack 的 require.context 和 Vite 的 import.meta.glob 的详细介绍和使用
前端·webpack·node.js
想睡好9 小时前
css文本属性
前端·css
qianmoQ9 小时前
第三章:组件开发实战 - 第五节 - Tailwind CSS 响应式导航栏实现
前端·css
zhoupenghui1689 小时前
golang时间相关函数总结
服务器·前端·golang·time