修改Git提交历史中的author,email和name等信息 |
您所在的位置:网站首页 › 更改homepodwifi › 修改Git提交历史中的author,email和name等信息 |
这是我参与11月更文挑战的第30天,活动详情查看:2021最后一次更文挑战 在我们日常工作中,通常由于某种原因,需要更新历史提交的commit信息。一般会有如下几种场景: 修改当前分支最新 commit 的提交信息 修改当前分支某历史commit的提交信息 修改当前分支所有提交的commit信息对于当次提交来说,我们可以显示指定提交者信息。 git commit -m "Initial commit" --author="mn " 通过git commit命令将暂存区内容添加到本地仓库后,git会生成相应的commit id。后续我们就可以针对指定的commit id 进行操作,比如,回退到某个commit id,拉取指定commit id的代码等。 下面我们针对上面的三种情况进行讲述。 修改上次提交的commit信息git commit --amend --author="果冻" 输入git commit --amend之后,进入编辑模式,修改提交信息,然后按wq保存退出。 如果不想修改提交信息,则添加--no-edit,如下所示: git commit --amend --author="果冻不吃皮 " --no-edit git commit --amend命令只会修改最后一次commit的信息,之前的commit需要使用git rebase 修改上几次提交的commit信息git rebase -i说明: git rebase -i命令可以压缩合并多次提交。 格式:git rebase -i [startpoint] [endpoint] 其中,-i的意思是–interactive,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]则指定了一个编辑区间,如果不指定 [endpoint] ,则该区间的终点默认是当前分支HEAD所指向的commit(该区间指定的是一个前开后闭的区间)。 首先,我们通过git rebase -i选择将哪些提交获得重定位。 例如,合并最近的三次提交: git rebase -i HEAD~3 或者,合并从当前head到15f745b(commit id)的提交: git rebase -i 15f745b 然后,在列表中将开头的pick修改为edit,然后重复执行以下命令直到完成: git commit --amend --author="mn " 之后,通过continue命令回到正常状态。 git rebase --continue 修改之前某一个特定的commit信息查看log,找到上一次提交的commit id git log 然后,通过git rebase到要修改的commit之前那个commit。 git rebase 928fc8a3686bf5fcf4527873e075703a9998c127 --interactive(与上面git rebase -i类似) 然后,在vi中修改pick为edit,wq保存退出,接着进行内容修改,git add后git commit --amend。 修改所有提交的commit信息 前提:重置本项目用户的信息 git config user.name '果冻' git config user.email '[email protected]' 复制代码 方案一:git rebase首先回到当前分支第一个commit。 git rebase -i --root 然后,弹出编辑器,在需要修改的commit处,将picked改变为edit,然后wq,退出vi。 git commit --amend --reset-author 之后,通过continue命令回到正常状态。 git rebase --continue 查看日志,确定是否修改成功 git log 最后,强制push到远程仓库 git push origin master -f 方案二:git filter-branch使用git rebase方式,步骤比较多,可以直接使用 git filter-branch快速方便。 例如,将提交者[email protected]修改为[email protected] # !/bin/sh git filter-branch --env-filter ' OLD_EMAIL="[email protected]" CORRECT_NAME="吃果冻不吐果冻皮" CORRECT_EMAIL="[email protected]" if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ] then export GIT_COMMITTER_NAME="$CORRECT_NAME" export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL" fi if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ] then export GIT_AUTHOR_NAME="$CORRECT_NAME" export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL" fi ' --tag-name-filter cat -- --branches --tags 复制代码 总结 修改 commit 提交信息场景操作命令修改最新 commit 的提交信息git commit --amend修改某历史 commit 的提交信息git rebase -i father_commitId,其中father_commitId表示上一个commitId修改第一个 commit 的提交信息git rebase -i --root注意: 如需将修改信息同步到远端仓库,可使用 git push -f 命令进行强制同步,该操作会覆盖远端分支的提交历史,请自行确认操作风险。 参考文档 如何修改第一个 commit 的提交信息 修改git提交历史中的author和email 如何修改git commit的author信息 git修改提交历史中的author信息 git rebase -i合并多次提交 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |