在日常开发过程中,我们经常会遇到需求频繁变动或在提交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
-
提交哈希值的变化:使用cherry-pick操作后,即使内容相同,新的提交的哈希值也会与原始提交不同,因为它是一个全新的提交。
-
提交历史的分叉: 使用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
看起来更简洁,更干净,分叉更少!