目录
用来还原指定提交中的所有修改文件的脚本
脚本功能介绍
使用示例
用来导出指定分支和提交范围内的所有修改文件的脚本
脚本功能介绍
使用示例
用来生成所有分支上的所有唯一提交的补丁文件的脚本
脚本功能介绍
使用示例
自己工作用的 git相关自动脚本
用来还原指定提交中的所有修改文件的脚本
脚本功能介绍
这个脚本是用来还原指定提交中的所有修改文件的。它接受一个参数,就是要还原的提交的哈希值。它会获取指定提交中修改的文件列表,并将这些文件还原到工作目录中,即将这些文件恢复到指定提交的父提交的状态。然后,它会将这些更改添加到暂存区并提交,以完成还原操作。
#!/bin/bash
# 检查参数数量
if [ "$#" -ne 1 ]; then
echo "Usage: $0 <commit-hash>"
exit 1
fi
commit_hash="$1"
# 获取指定提交中修改的文件列表
files=$(git show --name-only --pretty=format: "$commit_hash")
# 将指定提交中的所有修改文件还原到工作目录
for file in $files; do
echo "Reverting changes for: $file"
git checkout "$commit_hash^" -- "$file"
done
# 将更改添加到暂存区并提交
#git add .
#git commit -m "Revert changes from commit $commit_hash"
使用示例
要运行这个脚本,需要在终端中输入:
bash revert.sh <commit-hash>
例如:
bash revert.sh 3a4b5c6 # 将3a4b5c6提交中的所有修改文件还原
然后就可以看到类似下面的输出:
Reverting changes for: file1.txt
Reverting changes for: file2.txt
Reverting changes for: file3.txt
[master 7d8e9f0] Revert changes from commit 3a4b5c6
3 files changed, 12 insertions(+), 9 deletions(-)
用来导出指定分支和提交范围内的所有修改文件的脚本
脚本功能介绍
这个脚本是用来导出指定分支和提交范围内的所有修改文件的。它接受两个参数,分别是要导出的分支名和提交哈希值。它会获取指定分支和提交范围内修改的文件列表,并将这些文件复制到一个新建的目录中,目录的名字由分支名和提交哈希值组成。如果文件在指定的提交中被删除了,就跳过该文件。
#!/bin/bash
if [ $# -ne 2 ]; then
echo "Usage: $0 <branch> <commit_hash>"
exit 1
fi
branch="$1"
commit_hash="$2"
export_dir="exported_files_${branch}_${commit_hash}"
files_to_export=$(git diff-tree --no-commit-id --name-only -r ${branch}~${commit_hash})
mkdir -p "$export_dir"
for file in $files_to_export; do
file_dir=$(dirname "${export_dir}/${file}")
mkdir -p "$file_dir"
git show ${branch}:${commit_hash}^ -- "$file" > "${export_dir}/${file}" 2> /dev/null || echo "Skipped deleted file: $file"
done
echo "Files exported to $export_dir"
使用示例
要运行这个脚本,需要在终端中输入:
bash export.sh <branch> <commit_hash>
例如:
bash export.sh master 3a4b5c6 # 将master分支上3a4b5c6之前的所有修改文件导出
然后就可以看到类似下面的输出:
Skipped deleted file: file1.txt
Files exported to exported_files_master_3a4b5c6
用来生成所有分支上的所有唯一提交的补丁文件的脚本
脚本功能介绍
这个脚本是用来生成所有分支上的所有唯一提交的补丁文件的。它不接受任何参数。它会遍历所有的分支,并获取每个分支上的提交列表,然后对每个提交进行处理。如果一个提交已经被处理过,就跳过它;如果一个提交的消息中包含"init",就跳过它;如果一个提交是孤立的,就跳过它;如果一个提交修改了超过100个文件,就跳过它;如果一个提交的二进制差异超过10MB,就跳过它。对于其他的提交,它会生成一个补丁文件,并保存到patches目录下,以分支名和提交消息为子目录和文件名。
使用示例
要运行这个脚本,只需要在终端中输入:
bash generate_patches.sh
然后就可以看到类似下面的输出:文章来源:https://www.toymoban.com/news/detail-665729.html
Skipped patch with 'init' in commit message: init project
Skipped patch with more than 100 files changed: patches/master/add_some_features.patch
Skipped patch larger than 10MB: patches/dev/fix_some_bugs.patch
Skipped orphan commit: test orphan commit
在patches目录下,可以看到类似下面的结构:文章来源地址https://www.toymoban.com/news/detail-665729.html
patches/
├── master
│ ├── add_some_features.patch
│ └── update_readme.patch
└── dev
├── fix_some_bugs.patch
└── refactor_code.patch
到了这里,关于自动化脚本之Git相关的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!