相信大家都用上了国产化系统,在Linux系统上,没有比较好用的Git Gui客户端确实造成提交和修改效率低下。git命令比较多,很多时候只熟记常用的几个,但遇到问题时候都是用到不熟悉的命令,那么我在这里总结一下Git的各个命令用途和用法,希望你看完这篇文章后可以提高在Linux系统上提交和修改git的效率。
git init - 初始化一个Git仓库
# 在当前目录初始化一个Git仓库
git init
git add - 添加文件到暂存区
# 添加filename文件到暂存区
git add filename
git commit -m "message" - 提交更新,带提交注释
# 提交更新,注释为"完成首页UI"
git commit -m "完成首页UI"
git status - 查看仓库当前状态
# 查看新增、修改、删除等变更情况
git status
# 查看具体文件修改的内容差异
git status -v //显示工作区和暂存区文件的变更详情
# 显示忽略文件的概览
git status --ignored //显示被忽略文件的概览
# 显示未跟踪文件概览
git status --untracked-files=all //显示所有未跟踪文件的概览
# 显示简洁版本状态
git status -s //以简洁方式显示工作区和暂存区文件的状态
git diff - 比较工作目录和暂存区的不同
# 比较工作区和暂存区差异
git diff // 比较工作区和暂存区文件的差异
# 比较两次提交之间的差异
git diff commit1 commit2 // 比较commit1和commit2两次提交之间的差异
# 比较某次提交和工作区的差异
git diff commit // 比较给定提交和工作区的差异
# 比较两个分支
git diff branch1 branch2 // 比较branch1和branch2分支之间的差异
# 仅显示统计信息,不显示文件内容差异
git diff --stat // 仅显示统计信息,而不显示文件内容的DIFF
git log - 查看提交日志
# 按提交次数限制显示日志
git log -n 5 // 显示最近5次的提交日志
# 按日期范围过滤日志
git log --since=2022-06-01 --until=2022-06-30 // 显示2022年6月1日到6月30日期范围的提交日志
# 按作者过滤日志
git log --author="张三" // 只显示张三的提交日志
# 按关键词过滤日志
git log -S"函数名" // 显示修改过"函数名"函数的提交日志
# 显示简略的统计信息
git log --stat //显示每次提交的简略修改统计信息
git reset --hard commit_id - 回退到指定commit_id版本
# 回退到a5f4a0d版本
git reset --hard a5f4a0d
git checkout branchname - 切换分支
# 切换到develop分支
git checkout develop
git merge branchname - 合并分支到当前分支
# 将feature/login分支合并到当前分支
git merge feature/login
git branch - 查看所有分支
# 列出所有本地分支
git branch //列出所有本地分支
# 列出所有远程分支
git branch -r //列出所有远程分支
# 基于当前分支创建新的分支
git branch new-feature //基于当前分支创建new-feature分支
# 基于指定提交创建分支
git branch new-branch HEAD~5 //基于HEAD的第5个父提交创建分支
# 重命名当前分支
git branch -m new-name //重命名当前分支为new-name
git remote add origin url - 关联远程仓库
# 关联远程仓库origin
git remote add origin https://github.com/user/repo.git
# 查看当前远程仓库
git remote -v
# 修改远程仓库的URL
git remote set-url origin https://github.com/user/newrepo.git
# 添加新的远程仓库upstream
git remote add upstream https://github.com/user/forkedrepo.git
# 删除远程仓库origin
git remote rm origin
git push origin master - 推送master分支到远程仓库
# 推送本地master分支到origin远程仓库
git push origin master
git clone url - 克隆远程仓库
# 克隆远程仓库到本地
git clone https://github.com/user/repo.git
# 克隆指定分支
git clone -b branch https://github.com/user/repo.git
# 克隆指定标签
git clone --branch tag v1.0 https://github.com/user/repo.git
# 浅克隆仓库,不包括所有提交记录
git clone --depth 1 https://github.com/user/repo.git
# 镜像推送克隆仓库
git clone --mirror https://github.com/user/repo.git
git pull - 拉取远程仓库最新版本到本地
# 拉取远程master分支到本地当前分支
git pull origin master
# 拉取标签v1.0的代码到当前分支
git pull origin v1.0
# 反向合并远程分支到当前分支
git pull --rebase origin feature
# 拉取并自动合并或衍合所有远程追踪分支
git pull --all
# 拉取并自动处理冲突的合并
git pull -Xtheirs origin
git stash - 暂存当前工作目录的改动
# 暂存当前工作目录的改动
git stash
# 查看stash列表
git stash list // 列出所有stash的改动记录
# 恢复指定的stash内容
git stash apply stash@{2} // 恢复编号为2的stash内容
# 删除指定的stash
git stash drop stash@{3} // 删除编号为3的stash
git stash pop - 恢复暂存的改动
# 恢复最近一次stash
git stash pop
# 恢复指定的stash
git stash pop stash@{2}
# 恢复并删除此stash
git stash pop --index
# 恢复stash时保留压入的stash
git stash apply stash@{1}
# 删除最后一个stash
git stash drop
git rebase - 变基操作,合并分支时保持线性提交历史
# 将当前分支rebase到master
git rebase master
# 交互式rebase编辑历史提交
git rebase -i HEAD~5
# 跳过rebase中的某个提交
git rebase --skip
# 中止当前rebase过程
git rebase --abort
# 处理rebase过程中的冲突后继续
git rebase --continue
git tag - 添加标签
# 给最近一次提交加标签
git tag v1.0
# 给指定提交的hash加标签
git tag v1.0 9fceb02
# 创建带注释的标签
git tag -a v1.0 -m "version 1.0"
# 查看所有标签
git tag
# 查看标签详细信息
git show v1.0
git fetch - 获取远程仓库最新版本到本地
# 从远程获取最新版本到本地
git fetch origin
# 获取远程分支到本地
git fetch origin dev
# 获取远程仓库的所有分支
git fetch --all
# 获取远程仓库的标签
git fetch --tags
# 获取远程上游仓库分支
git fetch upstream
git cherry-pick commit_id - 拣选合并某个指定的提交到当前分支
# 合并提交号为a7683de的提交到当前分支
git cherry-pick a7683de
# 合并一个范围的提交
git cherry-pick 160e1260..160e1279
# 合并并自动处理冲突
git cherry-pick -X theirs 160e1279
# 放弃正在进行的cherry-pick
git cherry-pick --abort
# 继续处理冲突后的cherry-pick
git cherry-pick --continue
git bisect - 通过二分查找定位引入bug的提交
# 开始bisect过程查找引入bug的提交
git bisect start
# 标记当前提交为好的提交
git bisect good [commit]
# 标记当前提交为坏的提交
git bisect bad [commit]
# 跳过对某次提交的测试
git bisect skip
# 结束bisect并返回到开始检出的地方
git bisect reset
git reflog - 查看所有分支顶端的操作记录
# 查看所有分支HEAD指针运动的操作历史
git reflog
# 查看某一分支的引用日志
git reflog master // 显示master分支HEAD的历史记录
# 查看最近5条引用日志
git reflog -5 // 显示最近5条引用日志记录
# 查找删除分支的提交号
git reflog --all | grep 'delete branch' // 查找删除分支的提交记录
# 查看reset命令的提交号
git reflog --all | grep 'reset' // 查找reset命令操作的提交记录
git rm --cached filename - 从暂存区移除文件但保留在工作目录
# 移除config.txt的跟踪但不删除文件
git rm --cached config.txt
# 从版本控制中删除文件
git rm filename
# 递归删除整个目录
git rm -r folder/
# 从暂存区删除但保留文件在工作区
git rm --cached filename
# 强制删除文件或目录
git rm -f filename
# 删除glob模式匹配的文件
git rm log/*.log
git revert commit_id - 撤销指定的提交
# 撤销指定的提交
git revert b434dc7
# 撤销最新的一次提交
git revert HEAD
# 撤销指定的提交范围
git revert HEAD~3..HEAD
# 在revert时创建新的提交
git revert -n b434dc7
# 放弃进行中的revert操作
git revert --abort
git archive - 将git仓库打包成zip或tar文件
# 导出指定分支的整个仓库为zip文件
git archive --format=zip HEAD -o repo.zip
# 导出某个目录为tar文件
git archive --output=folder.tar HEAD:folder
# 导出指定commit区间的diff为tar文件
git archive --format=tar commit1..commit2 > diff.tar
# 导出最后一次提交的文件快照为zip文件
git archive @ -o snapshot.zip HEAD
# 导出仓库打包时过滤指定文件
git archive --format=zip HEAD --exclude="*.log"