当执行 git add “file” 添加到暂存器,然后执行 git commit 提交到本地库的时候,git 需要在commit 的时候在日志中写入一个唯一标识提交的 SHA-1 值,即是 Change-Id 的值。 git commit 时会调用 commit_msg 脚本检查提交信息,以便在 git push 的时候能正常推送到远程库。此时调用默认目录下的 commit_msg hook 脚本,默认目录为 “.git/hooks/commit_msg”。如果此目录下无 commit_msg 脚本则 commit 时提交日志中无 ChangeId 信息,则在 git push 的时候出错,无法正常把改动上传到远程服务器。
如下为 git push 提交不成功时出现的错误信息示例:
从服务器拷贝commit-msg 脚本到 .git/hooks/ 目录下
参考文章: git学习--commit-msg缺失导致的missing Change-Id问题分析
git push 到远程仓库时候
之后出现修改找不到的问题
又出现文件修改颠倒问题。
原理:
当执行git add “file”添加到暂存器,然后执行git
commit提交到本地库的时候,git需要在commit的时候在日志中写入一个唯一标识提交的SHA-1值,即是Change-Id值. git
commit时会调用commit_msg脚本检查提交信息,以便在git
push的时候能正常推送到远程库。此时调用默认目录下的commit_msg钩子脚本,默认目录为“.git/hooks/commit_msg”.
如果此目录下无commit_msg脚本则commit时提交日志中无ChangeId信息,则在git
push的时候出错,无法正常吧改动上传到远程服务器
如果 git log --graph 看不到commit的话
可以 git reflog 查看过去的提交。找到那个commit ID
再用 git reset --hard ID 回到那个版本。
之后如果push 提示一个 no change-ID问题
解决方法1:
方法一:
1>复制Change-Id:Ifbea87a6358d55a189528a5f501492c37bdfec21
2>执行gitdir=$(gitrev-parse--git-dir)scp-p-P29418HostName@192.168.77.11:hooks/commit-msg${gitdir}/hooks/ 从服务器拷贝commit-msg脚本到.git/hooks/目录下
3>执行gitcommit--amend重新修复提交,把第一步中的Change-Id:Ifbea87a6358d55a189528a5f501492c37bdfec21黏贴到提交日志的下一行。
4>重新执行gitpush推送本地改动到远程服务器
方法二:
如果上面你的git commit --amend 进入vim出现一个e325
目前我还没解决,这样只能找到以前的一个版本了。比较早回退到那里 。
git reset --soft id
git stash
git pull
git stash pop
git gui
进入gui 再把修改的文件重新commit一下
最后git push。
在gerrit审核中,经常会遇到开发人员提交的代码审核不通过的情况。那么开发人员这时有两个选择:
按照要求修改代码,然后重新提交一次代码
修改原来的Change
第一种方法会产生多次commit,而这些commit实际上是没有太多意义的,所以不推荐使用。
所以推荐第二种方法。下面讲解如何做:
安装 commit-msg hook
安装gerrit的commit-msg hook的目的是为了能够在每次提交的时候在你的本地产生一个Change-Id,这个Change-Id是将gerrit的Change和你的commit联系起来的纽带。
# 到项目的根目录下执行
curl -Lo .git/hooks/commit-msg
chmod u+x .git/hooks/commit-msg
这样的话,你每次提交的时候,这个hook都会在commit message的后面添加一行Change-Id:
$ git log -1
commit 29a6bb1a059aef021ac39d342499191278518d1d
Author: A. U. Thor
Date: Thu Aug 20 12:46:50 2009 -0700
Improve foo widget by attaching a bar.
We want a bar, because it improves the foo by providing more
wizbangery to the dowhatimeanery.
Bug: #42
Change-Id: Ic8aaa0728a43936cd4c6e1ed590e01ba8f0fbf5b
修改已经提交至gerrit的commit
$ git checkout 有问题的commit
$ <修改>
$ git commit --amend
$ git push origin HEAD:refs/for/master
Counting objects: 5, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 546 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Processing changes: updated: 1, done
remote:
remote: Updated Changes:
remote: gerrithost:8080/68
remote:
To ssh://gerrithost:29418/RecipeBook.git
* [new branch] HEAD ->refs/for/master
注意到上面的Updated Changes字样了吗?这说明我们是更新了gerrit上的Change,而不是一般情况下的New Changes。
然后你到gerrit上查看自己的Change,是不是有变化了?
windows下怎么弄?
commit-msg hook在windows下可能无法起作用,但我们依然有办法解决这问题。
我们还是按照前面讲的步骤来:
$ git checkout 有问题的commit
$ <修改>
$ git commit --amend
注意,这个时候你需要手工添加Change-Id了,到gerrit上找到自己的Change的Change-Id:
上图的最后一样就是Change-Id,然后手工添加到commit注释的最后一行上:
Change-Id: I347f61e90f259c78fcaaa8367b804941005a9b2b
然后
$ git push origin HEAD:refs/for/master
Counting objects: 5, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 546 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Processing changes: updated: 1, done
remote:
remote: Updated Changes:
remote: gerrithost:8080/68
remote:
To ssh://gerrithost:29418/RecipeBook.git
* [new branch] HEAD ->refs/for/master
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)