Git 将压扁的子树更改推送到gerrit
添加子树时:Git 将压扁的子树更改推送到gerrit,git,gerrit,git-subtree,Git,Gerrit,Git Subtree,添加子树时: git subtree add --prefix=vendor https://example.com/repo master --squash 创建了两个提交。一个用于压缩的子树提交 从15fc2b6..c6dc29b挤压“供应商”更改 和合并提交 将提交“SHA1”合并到主服务器 当我想把这个变更推给gerrit时,它需要一个变更ID。但git不允许我做 git rebase -i HEAD~2 和我对任何其他提交所做的一样进行返工,因为这是一个压缩的提交 因为这个,我不能
git subtree add --prefix=vendor https://example.com/repo master --squash
创建了两个提交。一个用于压缩的子树提交
从15fc2b6..c6dc29b挤压“供应商”更改
和合并提交
将提交“SHA1”合并到主服务器
当我想把这个变更推给gerrit时,它需要一个变更ID。但git不允许我做
git rebase -i HEAD~2
和我对任何其他提交所做的一样进行返工,因为这是一个压缩的提交
因为这个,我不能把这个改变推给gerrit。我不能直接将更改提交给heads(git),也不能破坏超级模块上的内容。它必须经过构建和测试。任何建议或帮助都将不胜感激
git filter branch
可以做很多事情,同时更新提交指针,使提交图保持完整。其中之一是运行一个命令来编辑所有提交消息,比如Gerrit的commit msg钩子
git-filter-branch-HEAD…HEAD~1
获取HEAD中的所有提交,但不获取HEAD~1,这对于git子树合并来说只是合并和挤压提交
git-filter分支--msg-filter
执行一个命令,该命令获取通过管道传送到stdin的提交消息,并将新消息写入stdout。commit-msg钩子脚本在文件上工作,因此需要一些shell脚本来将原始消息写入文件,运行钩子,然后将文件cat到stdout
在推给Gerrit之前,我将所有这些都放在一个脚本中运行:
#此命令在执行git子树{pull | add}后重新写入历史记录
#将Gerrit Change Id行添加到挤压提交消息。
#
#它假定HEAD是将子树合并到HEAD中的合并提交。
#原始头提交将在refs/original下备份,其中
#如果出现问题,它会很有帮助。
set-e
设置-o管道故障
GIT_DIR=$(readlink-f“$(GIT rev parse--GIT DIR)”)
TMP_MSG=“${GIT_DIR}/COMMIT_MSG_REWRITE”
git筛选器分支--msg筛选器\
“cat>${TMP_MSG}&&”${GIT_DIR}/hooks/commit MSG\“${TMP_MSG}&&”\
猫头…头~1
rm-rf“${TMP_MSG}”