0%

git 常见问题

1. 常见问题

1.1. 编写脚本参数配置

1
2
3
4
5
6
# 当要编写脚本,用 `cd` 命令切入切出目录比较麻烦
# 可以使用 `--git-dir` 及 `--work-tree` 指定 git 命令的工作目录, 这样就方便多了
git --git-dir "$project_dir/.git" --work-tree "$project_dir" status --porcelain

# 也可以使用 `GIT_DIR` 及 `GIT_WORK_TREE` 来配置, 效果是一样的
GIT_DIR="$project_dir/.git" GIT_WORK_TREE="$project_dir" git status --porcelain

1.2. 拒绝合并

提示 fatal: refusing to merge unrelated histories , or 绝合并无关的历史

1
2
3
4
5
# 该命令能把远程仓库合并到本地, 但是会有冲突
git pull origin master --allow-unrelated-histories

# 该命令能把远程仓库中最新版本覆盖本地, 无冲突
git pull --rebase=preserve

2. 去除大文件历史记录

https://gitee.com/help/articles/4232#article-header0

1
2
3
4
5
6
7
8
9
# 查看存储库中的大文件
git rev-list --objects --all | grep -E `git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print$1}' | sed ':a;N;$!ba;s/\n/|/g'`
# 或
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -15 | awk '{print$1}')"

改写历史, 去除大文件
git filter-branch --tree-filter 'rm -f path/to/large/files' --tag-name-filter cat -- --all
git push origin --tags --force
git push origin --all --force

3. Resource