如何修改Git已提交的日志

在某些时候,你发现了之前提交到git上的日志描述不全或者描述有误,这时你是会想要修改它的。 但提交已经是push到服务器,甚至是已经有好几个提交在后面了,这个怎么办呢?Git提供了一些方法来修改。

下面分为四种情况来处理。

情况一:最后一次提交且未push

执行以下命令:

git commit --amend

git会打开$EDITOR编辑器,它会加载这次提交的日志,这样我们就可以在上面编辑,编辑后保存即完成此次的修改。

情况二:最后一次提交且已push到服务器

执行以下命令:

git commit --amend
git push origin master --force

和情况一的做法一样。使用push推送到远程服务器是需要加上--force,让服务器更新历史记录。

需要注意的是:把修改后的日志强制push到Git服务器,如果别人本地的副本有修改,很有可能会导致他们同步不了,所以最好和他们核对下。

情况三:旧的提交且未推送

假设commit是倒数第3次提交,这个可以使用git log查看,

$ git log
commit b1b451d218cc23b6c769f373164f2b89cf54d0aa
Author: clcaza <clcaza@sina.cn>
Date:  Sat Mar 10 19:09:08 2018 +0800

  添加内容d

commit 04f0d1809d5d31cc6e930efcba47a5f3f7e93319
Author: clcaza <clcaza@sina.cn>
Date:  Sat Mar 10 19:08:24 2018 +0800

  添加内容c

commit 94fc8feb916442d56b558d5c370f18f057298921
Author: clcaza <clcaza@sina.cn>
Date:  Sat Mar 10 19:07:08 2018 +0800

  添加内容a

commit fd517efa9faf6a5ec71d0eac38fbcfa0cd689f40
Author: clcaza <clcaza@sina.cn>
Date:  Sat Mar 10 19:06:21 2018 +0800

  init

执行rebase

git rebase -i HEAD~3

它会打开一个编辑器,它会把最后前3次的提交显示出来,类似于:

pick 94fc8fe 添加内容a
pick 04f0d18 添加内容c
pick b1b451d 添加内容d

你会看到,它是按提交的顺序显示的,与git log显示的顺序相反。定位到你要编辑日志的那一行,把pick修改为edit,然后保存。

接着就是修改日志内容了

git commit --amend

完成编辑日志后,记得执行:

git rebase --continue

Rebase目的是打开提交的历史记录,让您选择要修改的内容。 Git会让你在一个新的分支修改内容。 git rebase --continue则是让你重新回到之前的分支。

情况四:旧的提交且已push到服务器

前面编辑日志的操作是和情况三是一样的:

git rebase -i HEAD~X
git commit --amend
git rebase --continue

X表示倒数第几次提交。

完成编辑日志后,执行push:

git push origin master --force

注意:这个情况二相似,把修改后的日志强制push到Git服务器,如果别人本地的副本有修改,很有可能会导致他们同步不了,所以最好和他们核对下。

版权声明:著作权归作者所有。

相关推荐

Linux安装Git的简易方式

在Linux安装Git首先要确定Linux系统的分发版本,这里介绍两种基于Debian和基于Red Hat的分发版本。基于Debian(包括Ubuntu)分发的Linux安装Git在debian系列的Linux使用apt安装,指令如下:sudo apt-get update sudo apt-get upgrade sudo apt-ge

Git切换分支到指定的提交(commit)

Git要切换到指定的提交,先找出提交的commitIdGit查找commitId$git log commit cbcf45ec166eee4ca0ade2dc78f1445f7d39f0ab Author: xxx Date:  Wed Jan 24 11:29:34 2018 +0800 fix bug

使用awk分析nginx访问日志access.log的ip

access.log为nginx的访问日志,默认路径在/var/log/nginx/access.log 分析access.log的ip命令如下:awk '{print $1}' access.log |sort|uniq -c|sort -n 命令里使用awk过滤出访问的ip使用sort对ip排序对排序后的ip进行统计,统计每一个ip访

Spring Boot:日志集成

Java日志框架Java有好几个日志框架,我们有时在选择Java日志框架时会有点迷惑。下面几个是常用的日志框架Common Logging:Apache最早提供的日志的门面接口。避免和具体的日志方案直接耦合。SLF4J(Simple Logging Facade for JAVA):和Common Logging一样,是一个门面框架,是对

Git撤销最后一次提交

Git可以使用reset重置来撤销提交。方法一撤销最后一次提交git reset HEAD~1 执行后,状态重置为上一次提交,且撤回提交的文件的状态变回unstaged,即文件没有被git跟踪。示例$ git commit -m 'add test.html' [master ade6d7e] add&nbs

Git:.gitignore和.gitkeep文件的使用

.gitignore.gitignore,顾名思义,这个文件是用于列出那些让Git忽略,不被跟踪的文件,即排除在Git的版本控制外。可以使用*通配符匹配多个字符。忽略指定名称的文件# .gitignore示例,忽略test.txt文件  ################### test.txt 忽略指定后缀的文件# .gitignore示例,忽略后缀为.impl的文件