GIT命令使用手册(详细&实用版)

时间:2024-12-20 17:43:02

 三、常见问题及解决方案:

问题一:拉取报错

$ git pull origin master
From gitee.com:loris-liu/ncn
 * branch            master     -> FETCH_HEAD
fatal: refusing to merge unrelated histories

本地仓库和远程仓库是独立的,它们没有共同的提交历史。你的本地分支是新创建的,并且没有提交历史。
在命令后面使用 --allow-unrelated-histories 标志来允许合并不相关的历史。

问题二:历史提交中单个文件过大解决

// 第一步查到该文件:
git rev-list --objects --all | grep 438f2335a16ab8239d709089b8463d2069a1
// 或者:
git rev-list --all | xargs -I{} git ls-tree --full-tree -r {} | grep 438f2335a16ab8239d709089b8463d2069a17637
// 第二步重写:
git filter-repo --path screen.zip --path-rename '' --invert-paths
// 或者:
git filter-branch --tree-filter 'rm -f screen.zip' HEAD 

问题三:撤销上一次合并

1.回滚到之前的提交

第一步:使用 git reflog 查看历史记录,找到合并操作之前的提交哈希值:git reflog
找到您想要回滚到的提交前的提交哈希值。
第二步:git reset 命令回滚到之前的提交:git reset --hard <commit-hash>

2.撤销最近的合并操作
git reset --hard ORIG_HEAD

将当前分支回退到最近的一次提交,并清除工作目录和暂存区中的所有本地修改,让你的工作区变得和最近的提交完全一样
解释:git reset --hard HEAD
    // git reset 是用来移动当前分支的 HEAD 指针的命令。
    // --hard 选项表示彻底重置。它会重置工作目录和暂存区,丢弃所有未提交的更改。
    // HEAD 是指向当前分支最新提交的指针。

3.撤销上一次commit
git reset --soft HEAD^
4.完全撤销上一次commit
git reset --hard HEAD^

问题四:仓库clone优化(只克隆最新的一个提交)

git clone --depth=1 <远程仓库地址>

--depth=1: 这是一个选项,表示只克隆最新的一个提交。这样可以减少克隆所需的时间和空间,因为你只获取最新的提交历史,而不是整个历史记录。

问题五:测试是否连通 ssh -T git@github.com

第一种方法:关闭SSl验证:
git config --global http.sslVerify "false"
git config --global https.sslVerify "false"

第二种方法:关闭全局代理:
git config --global --unset http.proxy
git config --global --unset https.proxy

PS:连接github超时可查看一下博文:

解决GitHub总是超时连接不上的问题_github超时-****博客

问题六:使用一次新的commit,替代上一次提交

git commit --amend -m [message]

如果代码没有任何新变化,则用来改写上一次commit的提交信息

问题七:撤销git cherry-pick操作

git cherry-pick --abort

问题八:查看代码贡献量

git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --format='%aN' --since="2023-01-01" --until="2023-12-31" --numstat | awk '{add += $1; subs += $2; loc += $1 - $2} END {print add, subs, loc}'; done

这个命令会输出自2023年1月1日至2023年12月31日期间每个贡献者的添加(additions)、删除(deletions)和总行数(loc)。

解释:

    git log --format='%aN' 列出提交的作者姓名。

    sort -u 对作者姓名进行排序并去重。

    while read name; do ... done 循环遍历每个作者姓名。

    echo -en "$name\t" 输出作者姓名,并添加一个制表符进行对齐。

    git log --author="$name" 筛选出指定作者的提交。

    --since 和 --until 参数限定时间范围。

    --numstat 选项使得git log输出每个文件的添加和删除行数。

    awk 用于累加每个作者的代码行数统计。