Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3548221
  • 博文数量: 1805
  • 博客积分: 135
  • 博客等级: 入伍新兵
  • 技术积分: 3345
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-19 20:01
文章分类

全部博文(1805)

文章存档

2017年(19)

2016年(80)

2015年(341)

2014年(438)

2013年(349)

2012年(332)

2011年(248)

分类: Android平台

2014-10-14 14:02:10

原文地址:git修改历史提交 作者:hubertx

最近碰到这样的情况:
开发人员在项目早期使用内部git server管理代码,项目正式的gerrit server建立起来后,开发人员需要将内部git server上的代码上传到gerrit server上去,但是由于早期提交到内部git server上的commit没有严格要求name和email,以及sign-off-by,所以导致这些commit无法提交到gerrit server上去。

解决方法如下:
1,修改历史commit中的信息:
需要修改的信息包括:Author, Change-ID, signed-off-by
1.1 修改Author信息
需要使用下面的脚本:

点击(此处)折叠或打开

  1. #!/bin/sh
  2.  
  3. git filter-branch --env-filter '
  4.  
  5. an="$GIT_AUTHOR_NAME"
  6. am="$GIT_AUTHOR_EMAIL"
  7. cn="$GIT_COMMITTER_NAME"
  8. cm="$GIT_COMMITTER_EMAIL"
  9.  
  10. if [ "$GIT_COMMITTER_EMAIL" = "your@email.to.match" ]
  11. then
  12.     cn="Your New Committer Name"
  13.     cm="Your New Committer Email"
  14. fi
  15. if [ "$GIT_AUTHOR_EMAIL" = "your@email.to.match" ]
  16. then
  17.     an="Your New Author Name"
  18.     am="Your New Author Email"
  19. fi
  20.  
  21. export GIT_AUTHOR_NAME="$an"
  22. export GIT_AUTHOR_EMAIL="$am"
  23. export GIT_COMMITTER_NAME="$cn"
  24. export GIT_COMMITTER_EMAIL="$cm"
  25. '
1.2 修改Change-ID和signed-off-by
这实际上就是重新提交commit,在提交commit之前先设置好钩子函数,在提交commit的时候加上-s参数。

点击(此处)折叠或打开

  1. #git rebase -i "uuid before the first commit to be re-submit"
  2. #git commit -s -amend
  3. #git rebase --continue
  4. #...

2, 将gerrit server上的empty git与本地master做rebase

点击(此处)折叠或打开

  1. #git remote add origin your_gerrit_url
  2. #git pull origin master:remotemaster
  3. #git rebase remotemaster
  4. #git branch -d remotemaster

3, push到gerrit server上

点击(此处)折叠或打开

  1. #git push origin master:refs/for/master



阅读(410) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~