git 在不丢失标签的情况下提交修改
git commit amendment without losing the tags
我有以下脚本运行在 post-commit hook of Git:
#!/bin/sh
# by Martin Seeler, and
# by Jorge Javier Araya Navarro
# destination of the final changelog file
OUTPUT_FILE=CHANGELOG.md
# generate the changelog
if ! type gitchangelog > /dev/null; then
echo "ERROR: Please install gitchangelog"
exit 1
fi
gitchangelog > $OUTPUT_FILE
# prevent recursion!
# since a 'commit --amend' will trigger the post-commit script again
# we have to check if the changelog file has changed or not
res=$(git status --porcelain | grep $OUTPUT_FILE | wc -l)
if [ "$res" -gt 0 ]; then
git add $OUTPUT_FILE
git commit --amend --no-edit
echo "Populated Changelog in $OUTPUT_FILE"
fi
这对于使用 gitchangelog 生成 CHANGELOG 文件很方便,而无需创建新的提交来在该文件上注册更改。
但是,如果我在 HEAD 上有一个标签,在 commit --amend
是 运行 之后,标签是 "lost",因此我必须在本地和远程删除它并重新创建它,这很烦人。
我正在尝试为脚本想办法在修改后移动标签,但此时我不确定自己在做什么。我应该首先列出 HEAD 上的标签吗?修改后可以移动标签吗? Git 会明白我的意思吗?
您可以查看 git tagm
alias I described here 以便在 git commit --amend
之后移动您的标签。
这将使以下序列自动化:
- 找到标签,
- 移动(即重新创建)
- 删除旧的。
我有以下脚本运行在 post-commit hook of Git:
#!/bin/sh
# by Martin Seeler, and
# by Jorge Javier Araya Navarro
# destination of the final changelog file
OUTPUT_FILE=CHANGELOG.md
# generate the changelog
if ! type gitchangelog > /dev/null; then
echo "ERROR: Please install gitchangelog"
exit 1
fi
gitchangelog > $OUTPUT_FILE
# prevent recursion!
# since a 'commit --amend' will trigger the post-commit script again
# we have to check if the changelog file has changed or not
res=$(git status --porcelain | grep $OUTPUT_FILE | wc -l)
if [ "$res" -gt 0 ]; then
git add $OUTPUT_FILE
git commit --amend --no-edit
echo "Populated Changelog in $OUTPUT_FILE"
fi
这对于使用 gitchangelog 生成 CHANGELOG 文件很方便,而无需创建新的提交来在该文件上注册更改。
但是,如果我在 HEAD 上有一个标签,在 commit --amend
是 运行 之后,标签是 "lost",因此我必须在本地和远程删除它并重新创建它,这很烦人。
我正在尝试为脚本想办法在修改后移动标签,但此时我不确定自己在做什么。我应该首先列出 HEAD 上的标签吗?修改后可以移动标签吗? Git 会明白我的意思吗?
您可以查看 git tagm
alias I described here 以便在 git commit --amend
之后移动您的标签。
这将使以下序列自动化:
- 找到标签,
- 移动(即重新创建)
- 删除旧的。