Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 将压扁的子树更改推送到gerrit_Git_Gerrit_Git Subtree - Fatal编程技术网

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}”