如何优雅地玩转 commit 信息

js

git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。在开发过程当中,咱们常常会使用到 git 的 commit 命令,使用多了分支的历史信息就会显得杂乱无章,最后合并到主分支时会影响主分支历史信息的优雅性。那么这个状况发生时咱们应该如何解决呢?git

接下来咱们看一下一些常见的场景:bash

  • 场景1:

本地已经提交过一次 commit,以后我又修改了内容,可是又不想再提交一次 commit 信息。分布式

这种状况可使用 git commit --amend, 这个命令来更改 commit 信息,把这一次的修改合并到该 commit 中,而后保存退出。这样就达到了保存此次修改的所有内容,而且只提交了一个 commit 信息。ui

  1. 使用 git log 查看提交历史

log

  1. 修改内容后,使用 git status 查看

status

  1. 使用 git add . 而后 git commit --amend

amend

  1. 修改 commit 信息(若是信息可以描述你后提交的内容,也能够不修改 commit 信息)后,wq 保存并退出。

fix

  1. 如今咱们再用 git log 查看历史记录

log

perfect !!spa

  • 场景2

本地已经屡次 commit,可是显得杂乱无章,想要把屡次 commit 合并成一次 commit 提交。3d

首先,使用 git log 查看历史提交信息版本控制

log

这个场景介绍两种方法解决code

方法一:git reset --softcdn

  1. 使用 git reset --soft somecommitid

reset

注意箭头所指的地方是你要回退的版本的 commitidblog

  1. 使用 git status 和 git log 查看当前状态

status

log

经过 git status 能够看到已经回退了,须要 git commit 保存该修改;经过 git log 能够看到目前已经回退到第一次提交的版本。

  1. 以后的操做跟场景一相同,使用 git commit --amend 提交信息,这里就再也不累赘阐述了。

方法二:git rebase -i

  1. 使用 git rebase -i 命令

出现以下界面,红色框内是操做区域,蓝色框内是指令说明区域

rebase

指令说明
pick:意味着包括提交。从新进行命令时,从新安排pick命令的顺序会更改提交的顺序。若是选择不包括提交,则应删除整行。
reword:与类似pick,可是使用后,从新设置过程将暂停并为您提供更改提交消息的机会。提交所作的任何更改均不受影响。
edit:将有机会修改提交,这意味着您能够彻底添加或更改提交。您还能够进行更多提交,而后再继续进行变基。这使您能够将大型提交拆分为较小的提交,或者删除在提交中所作的错误更改。
squash:该命令使您能够将两个或多个提交合并为一个提交。提交被压缩到其上方的提交中。Git使您有机会编写描述这两个更改的新提交消息。
fixup:这相似于squash,可是要合并的提交已丢弃其消息。提交仅合并到其上方的提交中,而且较早提交的消息用于描述这两个更改。
exec:这使您能够对提交运行任意的Shell命令。
复制代码
  1. 把第二次提交和第三次提交都改成 s,以后 wq 保存并退出

ws

  1. 接下来,咱们会进入如下界面,输入这三次提交的组合commit 信息(箭头所指之处是这三次提交合并为一次提交后的 commit 信息),再次 wq 保存并退出。

ws

  1. 再次用 git log 看下历史状态

log

perfect !!

git reset --soft commitid 和 git rebase -i 的区别:

git reset --soft commitid: 将代码回退到某个版本,而后再进性一次提交,这个时候咱们能够选择上一个 commit 信息或者新建一个 commit。

git rebase -i: 只是合并 commit 没有对代码进性提交,并且 git rebase 能够合并一个区间,好比我提交了6次,可是我想保留第一次和第六次,那么咱们就可使用 git rebase -i [startpoint] [endpoint] 将中间的commit 信息合并,若是不指定就是开区间。

  • 情场景三

当咱们的代码已经推到远程仓库后,这个时候咱们该怎么办呢?

遇到这样的状况也是能够解决的,咱们能够按照一二场景合并成咱们须要的 commit message 后,使用 git push -f 命令,这个命令能够覆盖掉以前提交的 commit message。可是不建议这样作,有必定风险存在。若是只是为了好看的 commit 最终引起系统 bug,那也就得不偿失了。

相关文章
相关标签/搜索