-
Notifications
You must be signed in to change notification settings - Fork 98
Expand file tree
/
Copy pathexport-uncommitted-changes.sh
More file actions
executable file
·46 lines (36 loc) · 1.37 KB
/
export-uncommitted-changes.sh
File metadata and controls
executable file
·46 lines (36 loc) · 1.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/bin/bash
# 导出所有未提交的更改到diff文件
# 用法: ./export-uncommitted-changes.sh [输出文件名]
# 如果不指定文件名,默认使用: uncommitted-changes-YYYY-MM-DD-HHMMSS.diff
OUTPUT_FILE=${1:-"uncommitted-changes-$(date +%Y-%m-%d-%H%M%S).diff"}
echo "正在导出未提交的更改到: $OUTPUT_FILE"
echo "========================================"
TEMP_FILE=$(mktemp)
echo "[未暂存的更改]" >> "$TEMP_FILE"
git diff >> "$TEMP_FILE" 2>&1
echo -e "\n[已暂存的更改]" >> "$TEMP_FILE"
git diff --cached >> "$TEMP_FILE" 2>&1
echo -e "\n[未跟踪的文件]" >> "$TEMP_FILE"
git ls-files --others --exclude-standard >> "$TEMP_FILE" 2>&1
if [ -s "$TEMP_FILE" ]; then
mv "$TEMP_FILE" "$OUTPUT_FILE"
echo "✓ 导出成功: $OUTPUT_FILE"
SIZE=$(du -h "$OUTPUT_FILE" | cut -f1)
echo " 文件大小: $SIZE"
echo ""
echo "统计信息:"
echo "--------"
if grep -q "^diff --git" "$OUTPUT_FILE"; then
NUM_FILES=$(grep -c "^diff --git" "$OUTPUT_FILE")
echo " 修改的文件数: $NUM_FILES"
fi
if grep -q "^[+-]" "$OUTPUT_FILE"; then
ADD_LINES=$(grep -c "^+" "$OUTPUT_FILE" | xargs)
DEL_LINES=$(grep -c "^-" "$OUTPUT_FILE" | xargs)
echo " 新增行数: ~$ADD_LINES"
echo " 删除行数: ~$DEL_LINES"
fi
else
rm "$TEMP_FILE"
echo "✓ 没有未提交的更改"
fi