GIT命令使用手册(详细实用版)
一、git常用操作参考
第一次提交完整步骤:
1.git init;
2.git add .
3.git commit -m "初始化"
4.git remote add origin https://github.com/githubusername/demo.git
5.git pull origin master
6.git push -u origin master(使用-u选项可以将本地的主分支与远程主分支关联起来,这样以后就可以直接使用git push和git pull而不需要指定远程仓库和分支。)
git config --list列出所有的Git配置选项
git config --global user.name "xxxxxxxxxxxxxx"
git config --global user.email "xxxxxxxxxxxxxx"
新增连接的远程仓库:git remote add origin <远程仓库URL>
修改连接的远程仓库:git remote set-url origin <远程仓库URL>
删除连接的远程仓库:git remote remove origin <远程仓库URL>
二、git常用命令参照表
序号 | 命令 | 描述 | 样例 |
---|---|---|---|
1 | git init | 初始化一个新的Git仓库 | |
2 | git clone | 将远程库克隆到本地 | git clone -b <想要克隆的远程仓库的分支名> <远程仓库地址> |
3 | git add | 将修改或新增的文件添加到Git暂存区 | |
4 | git commit | 将暂存区的文件提交到本地仓库 | |
5 | git push | 将本地的分支推送到远程仓库的分支(如果分支不存在则自动创建) 将本地指定分支推送到远程指定分支 | git push <远程仓库名称> <远程仓库分支名称> git push origin <本地指定分支名称>:<远程指定分支名称> |
6 | git pull | 将远程仓库的文件拉取到本地仓库 | |
7 | git branch | 查看当前本地分支 | |
8 | git branch -b | 创建一个新的本地分支 | |
9 | git branch -a | 列出所有本地和远程分支 | |
10 | git branch -m | 修改本地分支的名称 | git branch -m <旧分支名称> <新分支名称> |
11 | git merge | 将两个或多个分支合并到一起 | |
12 | git checkout | 切换到另一个分支或者恢复之前的提交 | git checkout <本地分支名称> |
13 | git checkout -b | 创建并切换到一个新的本地分支 | git checkout -b <新建本地分支名称> |
14 | git cherry-pick | 应用一个提交到当前分支 | git cherry-pick <commit id> |
15 | git remote | 管理远程仓库 | |
16 | git remote -v | 显示所有远程仓库的信息 | |
17 | git remote set-url | 设置或修改远程仓库的URL | |
18 | git remote remove | 移除一个远程仓库 | git remote rm <仓库名称> |
19 | git tag | 创建、列出或删除标签 | |
20 | git cz | 使用commitzen 这样的工具,它提供了交互式的提交信息输入方式,有助于生成格式化良好的提交消息 | |
21 | git status | 显示当前分支的文件状态,包括未跟踪文件、未提交的更改和冲突 | |
22 | git diff | 显示暂存区和工作目录之间的差异 | |
23 | git log | 显示提交日志,包括提交历史和每次提交的详细信息 | |
24 | git reset | 重置当前分支到指定的状态,可以是到某个提交、某个标签或某个commit的哈希值 | |
25 | git revert | 创建一个新的提交,这个提交的内容是撤销某个指定提交的更改 | |
26 | git branch -d/-D | 删除一个分支,-D 选项用于强制删除(即当分支有未合并的提交时) | |
27 | git checkout -- <file> | 丢弃工作目录中指定文件的所有本地更改 | |
28 | git rm | 从工作目录和暂存区中删除文件 | |
29 | git mv | 重命名文件,同时更新工作目录和暂存区 | |
30 | git show | 显示某个提交的详细信息,包括提交的日志、差异和文件内容 | |
31 | git stash | 保存当前的工作状态到一个栈,然后清空工作目录和暂存区 | |
32 | git stash apply | 应用以前保存的工作状态 | |
33 | git stash list | 列出所有保存的工作状态 | |
34 | git stash pop | 应用并移除最近保存的工作状态 | |
35 | git bisect | 帮助我们找到引入错误的提交 | |
36 | git grep | 在提交历史或当前分支中搜索文本 | |
37 | git gc | 执行垃圾回收,清理不再使用的对象 | |
38 | git reflog | 显示对引用(分支、标签等)所做的所有更改的历史记录 | |
39 | git fetch | 拉取最新的代码和分支信息,将远程分支拉取到本地新建的分支 | git fetch <远程仓库名称> <远程分支名称>:<本地分支名称> |
三、常见问题及解决方案:
问题一:拉取报错
$ 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超时-CSDN博客
问题六:使用一次新的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 用于累加每个作者的代码行数统计。