git_修改git历史提交记录
2016-05-17 16:22
295 查看
本修改仅限于修改本地的提交,提交的远程的请勿修改,以防引起开发者混乱。
首先执行 git rebase -i HEAD~3 这里首先rebase到HEAD~3的提交,这是你可以修改HEAD~2 - HEAD之间的提交。
此时,git为你提供一个编辑列表,如下:
pick f7f3f6d changed my name a bit
pick 310154e updated README formatting and added blame
pick a5f4a0d added cat-file
如下边的提示所说,你可以修改前边的pick,改成edit,表示退出后,git会在那次提交后停下来等待你的进一步修改。此时你可以执行git commit --amend去修改那次提交的注释。或者你可以git reset HEAD^,去撤销那次提交,然后做系列的改动并提交,这样相当于把那次提交拆分成多次提交。然后需要执行 git rebase --continue执行剩下的有pick标记的提交。
你也可以改成squash,表示把所有连续的标记有squash提交与这些行的最上边的那次pick标记的提交合并成一个提交,退出后修改提交说明即可。
你也可以删除某些行,或者颠倒某些行的顺序,表示你要上出那次提交或者颠倒那些提交的顺序。
/*****************************************************/
如果你想批量处理当前branch的所有提交,你可以用git filter-branch命令,该命令会在当前分支的所有提交上上执行参数所描述的操作。如果你要在所有分支的所有提交上执行,可以在后边加上--all选项。
比如,你想在当前分支上的所有提交上山删除一个你不小心提交的密码文件。你可以执行git filter-branch --tree-filter 'rm -f password.txt' HEAD.
另比如,你想修改你的邮箱为新的邮箱,可如下:
git filter-branch --commit-filter '
if [ "$GIT_AUTHOR_EMAIL" = "oldemail@localhost" ];
then
GIT_AUTHOR_NAME="new name";
GIT_AUTHOR_EMAIL="new email@example.com";
git commit-tree "$@";
else
git commit-tree "$@";
fi' HEAD
首先执行 git rebase -i HEAD~3 这里首先rebase到HEAD~3的提交,这是你可以修改HEAD~2 - HEAD之间的提交。
此时,git为你提供一个编辑列表,如下:
pick f7f3f6d changed my name a bit
pick 310154e updated README formatting and added blame
pick a5f4a0d added cat-file
如下边的提示所说,你可以修改前边的pick,改成edit,表示退出后,git会在那次提交后停下来等待你的进一步修改。此时你可以执行git commit --amend去修改那次提交的注释。或者你可以git reset HEAD^,去撤销那次提交,然后做系列的改动并提交,这样相当于把那次提交拆分成多次提交。然后需要执行 git rebase --continue执行剩下的有pick标记的提交。
你也可以改成squash,表示把所有连续的标记有squash提交与这些行的最上边的那次pick标记的提交合并成一个提交,退出后修改提交说明即可。
你也可以删除某些行,或者颠倒某些行的顺序,表示你要上出那次提交或者颠倒那些提交的顺序。
/*****************************************************/
如果你想批量处理当前branch的所有提交,你可以用git filter-branch命令,该命令会在当前分支的所有提交上上执行参数所描述的操作。如果你要在所有分支的所有提交上执行,可以在后边加上--all选项。
比如,你想在当前分支上的所有提交上山删除一个你不小心提交的密码文件。你可以执行git filter-branch --tree-filter 'rm -f password.txt' HEAD.
另比如,你想修改你的邮箱为新的邮箱,可如下:
git filter-branch --commit-filter '
if [ "$GIT_AUTHOR_EMAIL" = "oldemail@localhost" ];
then
GIT_AUTHOR_NAME="new name";
GIT_AUTHOR_EMAIL="new email@example.com";
git commit-tree "$@";
else
git commit-tree "$@";
fi' HEAD
相关文章推荐
- Android ImageView高度自适应
- RadioGroup中RadioButton图标文字居中解决
- Bean
- 常用工具类——应用程序属性信息访问类
- as3实现图片轮播
- <<深入Java虚拟机>>-第三章-垃圾收集器与内存分配策略-学习笔记
- 多态
- 自定义ContentProvider
- 一个具有多值属性的实体怎么映射为关系
- 用GDB调试NGINX
- android 输入框EditText禁止输入Emoji表情符
- JAVA设计模式(03):创建型-单例模式(Singleton)
- HTTPProxy服务器
- C++ Builder 学习1
- eclipse
- 服务器IMM2实战介绍
- freescale imx6最新版本bsp在天嵌imx6q开发板的移值
- 类型判断总结
- 限制输入内容必须为数字 不能为0 开头
- properties文件的读取