diff --git "a/08. vue\344\273\216\345\205\245\351\227\250\345\210\260\345\256\236\346\210\230/11. \350\267\257\347\224\261/\350\257\276\345\240\202\344\273\243\347\240\201/my-site/fix-git-date.sh" "b/08. vue\344\273\216\345\205\245\351\227\250\345\210\260\345\256\236\346\210\230/11. \350\267\257\347\224\261/\350\257\276\345\240\202\344\273\243\347\240\201/my-site/fix-git-date.sh" new file mode 100644 index 0000000000000000000000000000000000000000..f147ad625798851ce8a053075c0143cf6527c152 --- /dev/null +++ "b/08. vue\344\273\216\345\205\245\351\227\250\345\210\260\345\256\236\346\210\230/11. \350\267\257\347\224\261/\350\257\276\345\240\202\344\273\243\347\240\201/my-site/fix-git-date.sh" @@ -0,0 +1,68 @@ +#!/bin/bash +# fix-git-date.sh +# 用法: ./fix-git-date.sh +# 示例: ./fix-git-date.sh abc1234 "2025-10-20 12:00:00" + +set -e # 出错即退出 + +if [ $# -ne 2 ]; then + echo "用法: $0 " + echo "示例: $0 abc1234 \"2025-10-20 12:00:00\"" + exit 1 +fi + +COMMIT="$1" +NEW_DATE="$2" + +# 验证提交是否存在 +if ! git cat-file -t "$COMMIT" >/dev/null 2>&1; then + echo "错误: 提交 $COMMIT 不存在!" + exit 1 +fi + +# 获取提交到 HEAD 的距离 +REBASE_CMD=$(git rev-list --count "$COMMIT"..HEAD) +if [ "$REBASE_CMD" -eq 0 ]; then + echo "这是最后一次提交,直接 amend..." + GIT_COMMITTER_DATE="$NEW_DATE" git commit --amend --date="$NEW_DATE" --no-edit + echo "完成!时间已改为: $NEW_DATE" + exit 0 +fi + +echo "将修改提交: $COMMIT" +echo "目标时间: $NEW_DATE" +echo "启动交互式 rebase(自动处理)..." + +# 创建临时 rebase 指令文件 +TMP_DIR=$(mktemp -d) +INSTRUCTIONS="$TMP_DIR/instructions" + +# 生成 rebase 指令:把目标提交改为 edit,其他保持 pick +git rebase -i "$COMMIT^" > /dev/null 2>&1 + +# 自动编辑 rebase todo 列表 +sed -i.bak "s/pick $COMMIT/edit $COMMIT/" .git/rebase-merge/git-rebase-todo || { + echo "错误: 无法修改 rebase 指令" + rm -rf "$TMP_DIR" + exit 1 +} + +# 执行 rebase +GIT_SEQUENCE_EDITOR="cp $PWD/.git/rebase-merge/git-rebase-todo $INSTRUCTIONS && sed -i.bak 's/pick/edit/' $INSTRUCTIONS" \ +git rebase -i "$COMMIT^" || true + +# 现在 Git 停在目标提交 +echo "正在修改时间..." +GIT_COMMITTER_DATE="$NEW_DATE" git commit --amend --date="$NEW_DATE" --no-edit + +echo "继续 rebase..." +git rebase --continue >/dev/null 2>&1 || { + echo "rebase 完成(可能有轻微警告)" +} + +# 清理 +rm -rf "$TMP_DIR" + +echo "成功!提交 $COMMIT 的时间已改为: $NEW_DATE" +echo "VS Code 时间线栏已更新" +git log --pretty=fuller -1 "$COMMIT" \ No newline at end of file