Liz*_*net 5 git gerrit git-subtree
在添加子树时:
git subtree add --prefix = vendor https://example.com/repo master --squash
创建了两个提交.一个用于压缩子树提交
Squashed 'vendor' changes from 15fc2b6..c6dc29b
Run Code Online (Sandbox Code Playgroud)
和合并提交
Merge commit 'SHA1' into master
Run Code Online (Sandbox Code Playgroud)
当我想将此更改推送到gerrit时,它需要一个changeID.但是git不允许我这样做
git rebase -i HEAD~2
和我做任何其他提交一样的返工,因为它是一个被压扁的提交.
由于这个原因,我无法将这种变化推向格里特.我无法直接将更改提交到头(git)并破坏超模块上的内容.它必须经过构建和测试.任何建议或帮助表示赞赏.
git filter-branch可以做很多事情,同时更新提交指针,使提交图保持完整。其中之一是运行命令来编辑所有提交消息,例如 Gerrit 的 commit-msg 挂钩。
git filter-branch HEAD...HEAD~1获取 HEAD 中的所有提交,但不获取 HEAD~1,对于 git-subtree 合并来说,这只是合并和压缩提交。
git filter-branch --msg-filter接受一个命令来运行,该命令获取通过管道传输到标准输入的提交消息,并将新的消息写入标准输出。commit-msg 钩子脚本在文件上工作,因此需要一些 shell 脚本来将原始消息写入文件,运行钩子,然后将文件 cat 到 stdout。
我已将这一切放入脚本中,以便在推送到 Gerrit 之前运行:
# This command re-writes the history after doing a git subtree {pull|add}
# to add Gerrit Change-Id lines to the squash commit message.
#
# It assumes that HEAD is the merge commit merging the subtree into HEAD.
# The original HEAD commit will be backed up under refs/original, which
# is helpful if something goes wrong.
set -e
set -o pipefail
GIT_DIR=$(readlink -f "$(git rev-parse --git-dir)")
TMP_MSG="${GIT_DIR}/COMMIT_MSG_REWRITE"
git filter-branch --msg-filter \
"cat > ${TMP_MSG} && \"${GIT_DIR}/hooks/commit-msg\" ${TMP_MSG} && \
cat \"${TMP_MSG}\"" HEAD...HEAD~1
rm -rf "${TMP_MSG}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
557 次 |
| 最近记录: |