git修改commit信息

188 阅读5分钟

刚学git的时候,接触最多的基本就是下面三个命令

git add .

git commit -m ''

git push

git其实也有一些比较常用的命令,最近遇到问题想要修改git的commit的信息,就去了解了一下,在这里做个记录:

git commit amend

修改最近一次提交信息git commit amend

修改之前的提交信息:

image.png

image.png

image.png

image.png

推送更改到远程仓库

由于你已经修改了提交历史(即改变了最近一次提交的哈希),直接使用 git push 会导致冲突,因为远程仓库仍然保留着原来的提交。此时,需要使用 --force 或 --force-with-lease 参数强制推送,以覆盖远程仓库的相应提交。

  • 使用 --force 会强制更新远程分支,使其与你的本地分支状态完全一致。这意味着如果你或他人在此期间有其他提交到远程,它们将被你的这次推送覆盖。因此,除非你确信没有其他人在此期间推送到该分支,否则应谨慎使用 --force

  • --force-with-lease 提供了一种更安全的强制推送方式。它会在推送前检查远程分支的状态是否与你预期的一致。如果远程分支在你上次拉取后有其他人的新提交,推送会失败,从而避免意外覆盖他人的工作。在多人协作的环境中,--force-with-lease 是一个更好的选择。

成功改变:

image.png

修改历史的多次commit信息:

使用git log查看当前历史

image.png

执行git rebase -i HEAD~4就可以看到下面四次内容,也是一样的要改哪些就直接改前缀

image.png

image.png

下面我改了第一个 ”111“ 和第三个 ”我的是“ (对此这里还可以改成drop(删除)等其他操作,大同小异自己查查试试)

image.png

这里修改完之后vim使用wq保存之后,可以看到下面结果,根据他的提示继续执行git commit --amend 又进入vim编辑界面,开始修改你要改的commit信息:如图

image.png

image.png

改完保存之后回到终端继续执行第二个要edit的,使用git rebase --continue命令,这里我把之前的commit信息改成了 “在看一眼就会爆炸”

image.png

image.png

保存之后根据提示继续git rebase --continue,发现已经没有结果了

image.png

至此我们的commit已经改完了,可以看到本地修改后的结果,最后就是把这个结果提交到远程分支

image.png

使用前面说的两个命令中的一个:git push -f,查看远程已经成功修改了

image.png

如果你在变基过程中遇到问题,或者想要稍后继续,可以使用 git rebase --abort 来中断当前的变基操作。这会将HEAD重置到变基开始之前的状态。

除了上面的命令之外,还有一些常用的

git merge

一般的开发分支都会有好几种,比如线上的一个master,预发的pre,以及最多的开发需求分支,在开发一个需求的时候我们都会新建一个属于自己需求开发分支

git checkout -b '分支名'

但这只是在本地创建了,然后使用git push命令把这个分支推送到远程(不行就按照他的提示输入命令,最多就是加一些参数),这里git push仅仅是推送这个分支到远程,不会对你本地修改的代码做提交;

git merge 分支名可以将 “分支名 ”这个分支的代码合并到你当前的这个分支(通过git branch查看当前分支),有冲突的话就的自己解决了。

如果想要将自己的代码合并到线上的分支,就可以按照下面来:

等你的需求开发完之后,一般就会进行分支的合并到master,但是在合并前需要让你的ld看看代码的规范性,也就是需要提一个merge request合并请求,这个一般在gitlab等平台上直接操作就行,等你的ld评审了你的代码之后,就可以点击按钮直接合并了

git reset

这个命令主要是可以回退到之前某个节点,然后通过git push -f可以强制把这个节点后面的提交全部覆盖,

git revert

主要是可以回退到一个之前提交的历史节点,然后可以通过这个重新提交新创建一个与之前那个提交的相反的代码,也就是回退,最主要他不会改变之前以及之后的提交。

git init

git init主要是用于初始化一个git仓库,执行后会生成一个.init文件

git clone

git clone主要是clone一个远程的git仓库到本地,一般情况下远程有仓库,你需要开发是就可以直接克隆下来,然后进行协同开发了,注意:clone了远程仓库之后文件夹中会多一个.init文件,又来存储一些基本信息。

git remote -v

可以查看当前仓库关联的远程仓库

总结

写这篇文章也是因为最近项目用了commit-lint来对commit的提交信息进行校验,遇到了一些问题,就学习了一下git的其他命令,如果有问题还希望大佬指出。