Git知识点汇总表格总结

      Git应该是现在各个做开发公司使用最广泛的版本管理工具了,还有一些公司可能用的SVN,不过总体来说,Git绝对是主流,SVN是集中式版本管理,使用起来相对Git更简单,不过功能相对Git也略显简略,Git的优势也主要体现在分支的管理更灵活和强大。本文主要总结Git的特性和一些操作命令,在文末会对Git和SVN做一个简要的对比。

目录

1.Git概要介绍

2.Git的基本命令

3.Git的分支管理

 4.Git的工作流程

5.Git的高级命令和技巧

6. Git的远程操作和协作流程

7. Git的冲突和合并策略

8.Git的标签管理

9.Git的子模块管理

10. Git的引用管理

11.Git的钩子(hooks)系统

12. Git的性能优化和调试技巧

13.Git的邮件工作流

14.Git的子命令和辅助工具

15.Git的配置选项

16.Git的安全性和权限管理

17.Git的日志和审计功能

18.Git的打包和存档功能

19.Git的网络操作

20.Git的维护和故障排除

21.Git与SVN特点对比


1.Git概要介绍
概念 解释
版本控制 版本控制是一种记录文件变更历史的方法,Git是一种分布式版本控制系统
分布式 每个开发者都有完整的代码库副本,可以独立提交和合并代码
仓库(Repository) 存储项目文件和历史记录的地方,可以是本地或远程的
提交(Commit) 将文件的变更记录到本地仓库中
分支(Branch) 用于开发新功能或修复bug的独立开发线
合并(Merge) 将一个分支的更改合并到另一个分支
冲突(Conflict) 当两个分支有相同的更改时,合并时可能会发生冲突
克隆(Clone) 创建本地仓库的副本,通常用于开始一个新的开发工作
拉取(Pull) 从远程仓库获取最新的更改并合并到本地仓库
推送(Push) 将本地仓库的更改推送到远程仓库
2.Git的基本命令
命令 描述
git init 初始化一个新的Git仓库
git clone 克隆一个远程仓库到本地
git add 将文件的更改添加到暂存区
git commit 提交暂存区的更改到本地仓库
git status 查看当前仓库的状态,包括未跟踪的文件和更改
git log 显示提交历史
git branch 列出所有分支,或创建/删除分支
git checkout 切换到指定的分支或提交
git merge 将一个分支的更改合并到当前分支
git pull 从远程仓库拉取最新的更改并合并到本地分支
git push 将本地分支的更改推送到远程仓库
git fetch 从远程仓库获取最新的更改,但不自动合并
git diff 显示文件更改的内容,或显示两个提交之间的差异
git reset 重置当前HEAD到指定的状态,可以用于撤销提交
git rm 从仓库中删除文件
git mv 移动或重命名文件
git tag 创建、列出、删除或验证标签
git config 获取和设置Git配置选项
git stash 临时保存工作进度,允许你切换分支而不丢失未提交的更改
gitignore 指定Git应忽略的文件或文件夹
3.Git的分支管理
命令 描述
git branch 列出所有分支,可以使用 -b 创建新分支,或使用 -v 查看分支合并关系
git branch -a 列出所有分支,包括远程的
git branch --all 同上,--all 是 -a 的简写
git branch -r 列出所有远程分支
git branch -d 删除指定分支
git branch -m 重命名分支
git checkout -b 创建并切换到新分支
git checkout 切换到指定分支
git merge 将指定分支的更改合并到当前分支
git rebase 将当前分支上的更改应用到另一分支上,重新设置基底
git cherry-pick 将一个特定的提交应用到当前分支上
git branch --set-upstream-to 设置当前分支跟踪的远程分支
git branch --unset-upstream 取消当前分支跟踪的远程分支
git branch --contains 查看哪些分支包含特定的提交
git branch --no-merge 查看哪些分支尚未合并到指定分支
 4.Git的工作流程
工作流程步骤 描述
git init 初始化一个新的Git仓库
git clone 克隆远程仓库到本地
git checkout -b 创建并切换到新的分支
修改文件 在本地进行文件的修改
git status 查看当前工作目录的状态
git add 将修改添加到暂存区
git commit 提交更改到本地仓库
git push 将本地分支的更改推送到远程仓库
git fetch 从远程仓库获取最新的更改
git merge 将远程分支的更改合并到本地分支
git pull 拉取远程分支的更改并合并到本地分支(git fetch + git merge
git branch -d 删除本地分支
git branch -r -d 删除远程分支
git log 查看提交历史
git diff 查看文件差异或提交之间的差异
5.Git的高级命令和技巧
命令 描述
git bisect 二分查找,用于确定引入bug的提交
git blame 显示文件的每一行的最后修改者和修改提交
git grep 在工作目录或索引中搜索字符串
git ls-files 列出当前Git跟踪的文件
git reflog 显示本地仓库的操作日志
git reset --hard 将HEAD重置到特定状态,并丢弃所有更改
git reset --soft 将HEAD重置到特定状态,但不丢弃更改
git reset --mixed 默认选项,重置HEAD但不丢弃更改
git revert 创建一个新的提交,撤销之前提交的更改
git clean 清除未跟踪的文件
git stash save 保存当前的工作进度,清理工作目录
git stash list 列出所有的储藏列表
git stash pop 恢复最近的储藏,并从储藏列表中移除它
git stash apply 应用指定的储藏到当前工作目录
git cherry-pick 将一个或多个提交应用到当前分支
git rebase -i 交互式变基,用于修改、删除或重新排序提交
git submodule 管理项目中的Git子模块
git worktree 允许你拥有多个工作目录,指向仓库的不同分支或提交
git gc 清理不必要的文件和优化本地仓库的存储
git fsck 检查Git仓库的完整性和腐败的文件
6. Git的远程操作和协作流程
命令 描述
git remote add 添加一个新的远程仓库
git remote -v 列出所有已知的远程仓库及其URL
git remote rename 重命名远程仓库
git remote rm 删除远程仓库
git fetch 从远程仓库获取最新的更改但不自动合并
git pull 拉取远程分支的更改并尝试自动合并到当前分支
git push 将本地分支的更改推送到远程仓库
git push -u 推送本地分支到远程仓库,并设置为上游分支
git push --force 强制推送更改到远程仓库,可能会覆盖远程仓库的更改
git remote update 更新远程仓库引用
git remote show 显示远程仓库的详细信息
git ls-remote 列出远程仓库中的引用
git remote set-url 设置或更新远程仓库的URL
git remote prune 移除远程仓库中已不存在的引用
git remote branch 管理远程分支
git remote prune origin 移除本地仓库中不再存在的远程分支
git fetch --prune 在获取数据的同时清理过时的远程跟踪分支
git push --mirror 将本地仓库的所有分支和标签推送到远程仓库,适合创建镜像仓库
git remote set-branches 设置远程跟踪分支
git remote set-head 设置远程仓库的HEAD引用,指向特定的分支或提交
7. Git的冲突和合并策略
命令 描述
git merge 将一个分支的更改合并到当前分支
git mergetool 启动图形化合并工具来帮助解决合并冲突
git diff --cached 显示暂存区与上一个提交之间的差异
git diff 显示工作目录与暂存区或当前分支的差异
git status 显示当前工作目录的状态,包括未跟踪的文件和更改
git add 将文件的更改添加到暂存区
git commit 提交暂存区的更改到本地仓库
git rebase 将当前分支上的更改应用到另一分支上,重新设置基底
git cherry-pick 将一个特定的提交应用到当前分支上
git reset --merge 取消自动合并操作,通常在合并冲突时使用
git reset --abort 取消变基操作,通常在变基冲突时使用
git log 查看提交历史,可以查看分支合并和变基的历史
git reflog 查看本地仓库的操作日志,用于恢复丢失的提交
git revert 创建一个新的提交,撤销之前提交的更改
git clean -n 显示将要被清除的未跟踪文件,不执行清除
git clean -f 清除工作目录中的未跟踪文件
git reset --hard 重置当前HEAD到指定的状态,并丢弃所有更改
git reset --soft 将HEAD重置到特定状态,但不丢弃更改
git reset --mixed 默认选项,重置HEAD但不丢弃更改
git config --global merge.conflictstyle diff3 设置合并冲突样式为diff3,显示所有父提交的内容

在Git中,冲突解决和合并策略是版本控制中常见的操作,特别是在多人协作的项目中。这些命令和配置选项可以帮助开发者更有效地处理分支合并时产生的冲突。 

8.Git的标签管理
命令 描述
git tag 列出当前仓库的所有标签
git tag <tagname> 创建一个新标签,可以是轻量级标签(不附加任何信息)
git tag -a <tagname> 创建一个带附加信息的标签(注释标签)
git tag -s <tagname> 创建一个带签名的标签
git tag -d <tagname> 删除一个标签
git show <tagname> 查看标签的详细信息
git push tag <tagname> 将本地标签推送到远程仓库
git push --tags 推送所有本地标签到远程仓库
git fetch --tags 从远程仓库拉取所有标签
git tag -l 列出所有标签
git tag -a <tagname> -m "message" 创建带消息的注释标签
git verify-tag 验证GPG签名的标签
git tag -f 强制创建标签,即使该标签名已存在
git describe 显示特定的提交,通常是最近的标签,加上距离标签的提交数量
git ls-remote --tags <remote> 列出远程仓库的所有标签
git checkout <tagname> 切换到标签所在的提交
git tag --delete <tagname> 删除本地标签,-d 是 delete 的简写
git push ---delete <tagname> 删除远程仓库中的标签
git for-each-ref refs/tags 显示所有标签的详细信息
git tag --sort=-v:refname 按版本号排序标签列表

标签管理是Git中用于标记特定提交的一种机制,常用于版本发布。通过标签,可以轻松地引用和共享特定的代码快照。

9.Git的子模块管理
命令 描述
git submodule add 添加一个新的子模块到仓库
git submodule update 更新所有子模块到最新的提交
git submodule init 初始化所有子模块
git submodule 管理子模块的命令,可以查看、更新、添加子模块
git submodule status 显示所有子模块的状态
git submodule deinit 取消初始化子模块,停止跟踪子模块
git submodule sync 同步所有子模块的远程URL
git submodule foreach 对所有子模块执行命令
git submodule update --remote 更新子模块到其远程仓库的最新状态
git clone --recurse-submodules 克隆仓库时也克隆所有子模块
git submodule update --init --recursive 初始化并更新所有子模块,递归地
git submodule set-branch 设置子模块的跟踪分支
git submodule set-url 设置子模块的远程仓库URL
git submodule absorbgitdirs 将子模块的 .git 目录合并到父仓库中
git submodule <submodule-name> update --remotes 更新指定子模块的远程跟踪分支
git submodule <submodule-name> branch --set-upstream 设置子模块的上游分支
git config -f .gitmodules 编辑 .gitmodules 文件,定义子模块的元数据
git submodule foreach git pull 为所有子模块拉取最新的更改
git submodule <submodule-name> diff 显示指定子模块的更改差异
git archive --format=tar --submodules=all -o archive.tar HEAD 归档当前仓库及其所有子模块的状态到tar文件

子模块允许你将一个Git仓库作为另一个仓库的子目录。这在大型项目中非常有用,特别是当你需要依赖外部库或项目时。

10. Git的引用管理
命令 描述
git reflog 显示本地仓库的操作日志,包括HEAD的变化和分支的更新
git show-ref 显示所有已知的引用,包括分支和标签
git symbolic-ref 显示或更新一个符号引用,如分支
git ls-remote 列出远程仓库中的引用
git update-ref 更新一个引用的目标,通常用于脚本
git for-each-ref 对仓库中每个引用执行命令
git rev-parse 解析出引用或对象的SHA-1哈希值
git log -g 显示关于引用的日志
git whatchanged 显示一个分支的日志,不包括合并的提交
git ls-tree 列出树对象的内容,不包括树的树和blob
git cat-file 显示Git对象的内容,如blob、tree或commit
git update-index 直接修改索引文件,而不是通过git add
git name-rev 显示基于引用的简化的名字,如分支或标签
git branch -r 列出所有远程分支
git branch -a 列出所有分支,包括本地和远程
git checkout 切换到指定的分支或标签
git reset 重置当前HEAD到特定的状态,可以是提交、树或blob
git branch --set-upstream-to 为本地分支设置上游分支
git branch --unset-upstream 移除本地分支的上游设置
git remote set-head 设置远程仓库的HEAD引用,指向特定的分支或提交

引用管理是Git中用于操作和管理引用(如分支和标签)的命令集合。这些命令对于理解和操作Git的内部结构非常有用,尤其是在自动化脚本和高级Git操作中。

11.Git的钩子(hooks)系统
钩子类型 描述
pre-commit 在本地提交之前运行,常用于检查代码质量
post-commit 提交后运行,可以用来发送通知或执行后续操作
pre-rebase 在开始变基操作之前运行
post-checkout 检出分支或文件后运行
post-merge 合并操作后运行
pre-push 在推送操作之前运行,可以用来进行最后一刻的检查
post-push 推送操作完成后运行
pre-receive 在接收推送之前运行,常用于服务器端验证
update 用于更新引用,如在接收推送时
post-receive 接收推送后运行,可以用来更新服务或触发构建
pre-auto-gc 在自动垃圾收集之前运行
post-rewrite 在历史重写(如 git commit --amend 或 git rebase)之前运行
prepare-commit-msg 在准备提交信息模板之前运行
commit-msg 在提交信息编写完成后、提交之前运行
pre-applypatch 在应用补丁之前运行
post-applypatch 在应用补丁之后运行
pre-merge-commit 在合并提交创建之前运行
post-merge-commit 在合并提交创建之后运行
pre-push 在执行本地 git push 之前运行
fsmonitor 监控文件系统更改,用于某些高级用途

钩子是Git仓库中的一种机制,允许在特定的Git事件发生时自动执行自定义脚本。这些脚本可以用于自动化常规任务、执行安全检查、运行测试或更新其他系统。

12. Git的性能优化和调试技巧
命令 描述
git gc 清理不必要的文件,优化仓库的存储
git gc --prune=<date> 清理指定日期前未被任何对象引用的文件
git gc --aggressive 执行更彻底的清理操作
git fsck 检查Git仓库的完整性和错误
git reflog 显示本地引用的日志,用于恢复丢失的对象或提交
git count-objects 显示仓库中对象数据库的统计信息
git repack 重新打包仓库中的松散对象
git config 配置Git的性能选项,如大文件存储等
git config --list 列出所有配置选项
git config --get 获取特定配置项的值
git config --unset 删除配置项
git config --edit 编辑配置文件
git largefilelist 管理大文件的排除列表
git lfs Git Large File Storage,用于处理大型文件
git bisect 二分查找引入bug的提交
git blame -C 显示文件每一行的最后修改者,考虑代码移动
git log --stat 显示提交的统计信息,包括每个文件的更改
git log -p 显示每个提交的内容差异
git log --pretty 使用自定义格式显示日志
git log --graph 显示分支和合并的图形化表示

性能优化和调试是Git使用过程中的重要部分,特别是在处理大型项目或需要维护长时间运行的仓库时。这些命令和配置选项可以帮助提高Git操作的效率,减少资源消耗,并帮助开发者更好地理解和控制Git的行为。

13.Git的邮件工作流
命令 描述
git am 应用邮件格式的补丁
git format-patch 从提交中生成邮件格式的补丁
git send-email 发送一个或多个补丁或提交到指定的邮箱
git request-pull 生成一个摘要,用于请求从其他分支拉取更改
git imapsend 将补丁发送到IMAP服务器
git ams 用于处理邮件格式的补丁
git apply 应用一个补丁,但不记录到项目历史中
git cherry-pick 将一个或多个提交应用到当前分支上
git fetch 从远程仓库获取最新的更改但不自动合并
git push 将本地分支的更改推送到远程仓库
git pull 拉取远程分支的更改并尝试自动合并到当前分支
git rebase 将当前分支上的更改应用到另一分支上,重新设置基底
git archive 将特定分支或提交的文件导出为一个存档文件
git diff 显示提交、分支或文件的差异
git log 显示提交历史
git shortlog 显示提交历史的概要信息
git tag 创建、列出、删除或验证标签
git blame 显示文件的每一行的最后修改者和修改提交
git notes 添加或查看关于提交的注解
git grep 在工作目录或索引中搜索字符串

邮件工作流是一种使用邮件客户端来促进分布式版本控制系统中协作者之间沟通的Git工作模式。它允许开发者通过电子邮件发送补丁,然后由项目维护者将这些补丁应用到主仓库中。

14.Git的子命令和辅助工具
命令 描述
git help <command> 显示特定命令的帮助信息
git help -g 显示所有可用的Git命令
git help -a 显示所有可用的帮助主题
git help -w 显示帮助主题的完整路径
git help --all 显示所有帮助主题的列表
git help --man 显示所有可用的man页
git help --web 在浏览器中打开当前命令的帮助页面
git help --guide 显示一些有用的Git指南链接
git help config 显示关于Git配置选项的帮助信息
git help everyday 显示日常使用Git的指南
git help glossary 显示Git的术语表
git help tutorial 显示Git教程
git help concepts 显示Git的核心概念
git help workflows 显示Git的工作流程
gitk 启动Git的图形化界面查看工具
git-gui 启动Git的图形用户界面
tig 另一个文本模式的Git界面查看工具
git-cola 一个跨平台的图形用户界面(GUI)
git status 显示工作目录的状态
git diff 显示当前工作目录与暂存区或分支的差异

Git提供了多种辅助工具和子命令来帮助用户更好地理解和使用Git。这些工具和命令可以提供额外的信息和功能,帮助用户更有效地管理项目

15.Git的配置选项
配置选项 描述
user.name 设置提交时使用的用户名
user.email 设置提交时使用的电子邮件地址
commit.template 为提交信息指定一个模板文件
core.editor 指定默认的文本编辑器
core.excludesfile 指定排除文件的列表
core.pager 用于分页显示的程序
color.ui 是否使用颜色高亮显示
push.default 设置推送操作的默认行为
merge.tool 指定合并时使用的图形用户界面工具
merge.conflictstyle 设置合并冲突的显示风格
rebase.autosquash 在交互式变基时自动压缩提交
branch.autosetuprebase 设置新分支是否默认使用变基操作
branch.<branchname>.remote 设置分支的上游分支
branch.<branchname>.merge 设置分支合并的引用
remote.origin.url 设置远程仓库origin的URL
remote.origin.fetch 设置从origin远程仓库拉取时的默认引用
alias.<aliasname> 为Git命令设置别名
core.autocrlf 在Windows上自动转换换行符
core.filemode 设置是否跟踪文件权限的更改
core.ignorecase 设置在忽略文件时是否忽略大小写

Git的配置选项允许用户根据个人或项目的需要定制Git的行为。这些配置可以是全局的、针对特定仓库的,或者是系统级别的。

16.Git的安全性和权限管理
命令/配置 描述
git config http.sslVerify 设置是否验证SSL证书
git config core.protectHFS 保护HFS+文件系统,防止创建不合法的文件名
git config core.protectNTFS 保护NTFS文件系统,防止创建不合法的文件名
git config core.sharedRepository 设置仓库是共享的还是单用户使用的
git config receive.denyNonFastForwards 拒绝非快进推送,防止覆盖远程分支上的更改
git config receive.denyDeletes 拒绝删除分支或标签的推送
git config receive.denyCurrentBranch 阻止推送到当前分支,保护默认分支
git config transfer.fsckObjects 在传输对象时检查对象的完整性
git config core.bare 设置仓库是否为裸仓库
git config core.packedGitWindowSize 设置打包Git对象时使用的内存大小
git config core.packedGitLimit 设置允许的打包Git对象的大小
git config core.packedGitUseLoose 设置在什么情况下使用松散对象
git config core.untrackedCache 设置是否启用未跟踪文件的缓存
git config core.ignoreStat 设置是否忽略文件的统计信息
git config credential.helper 设置凭据存储帮助程序,用于存储和检索认证信息
git config http.postBuffer 设置HTTP POST请求的最大缓冲区大小
git config pack.window 设置打包Git对象时使用的内存大小
git config pack.depth 设置打包Git对象时的深度
git config pack.compression 设置打包Git对象时的压缩级别
git config gc.auto 设置自动垃圾收集的阈值

安全性和权限管理是Git中重要的方面,尤其是在团队协作和公共仓库中。通过适当的配置和命令,可以保护仓库不受未授权的访问和潜在的安全威胁。

17.Git的日志和审计功能
命令 描述
git log 显示提交历史
git log --oneline 以精简的一行格式显示提交历史
git log --graph 以图形化的方式显示分支和合并的历史
git log --stat 显示每个提交的文件更改统计
git log -p 显示每个提交的差异
git log --pretty 使用自定义格式显示日志
git log --follow 显示文件的详细历史,包括重命名
git log --since 显示指定时间之后的提交
git log --until 显示指定时间之前的提交
git log --author 显示由特定作者提交的提交
git log --grep 搜索提交信息中包含特定文本的提交
git log --committer 显示由特定提交者提交的提交
git shortlog 以摘要形式显示提交历史
git reflog 显示本地引用的日志,用于恢复丢失的对象或提交
git show 显示特定的提交、分支或标签的信息
git whatchanged 显示一个分支的日志,不包括合并的提交
git log --online 显示简化的提交历史
git log --decorate 显示引用信息,如分支和标签
git log --abbrev-commit 显示简短的SHA-1哈希值
git blame 显示文件的每一行的最后修改者和修改提交

日志和审计是Git中用于追踪项目历史和变更的重要工具。通过这些命令,用户可以获取关于提交、分支、标签和其他Git对象的详细信息。

18.Git的打包和存档功能
命令 描述
git archive 将特定分支或提交的文件导出为一个存档文件
git bundle 创建一个包含特定提交或分支的包,以便在没有网络的情况下传输
git bundle create 创建一个包文件
git bundle verify 验证包文件的内容是否完整
git bundle list 列出包文件中包含的引用
git gc 清理不必要的文件,优化仓库的存储
git prune 移除未被任何引用跟踪的对象
git reflog expire 设置引用日志的过期时间
git pack-objects 将松散的对象打包成一个包文件
git unpack-objects 从包文件中解包对象
git repack 重新打包仓库中的松散对象
git gc --prune 清理过期的包文件和未使用的对象
git gc --aggressive 执行更彻底的清理操作
git gc --auto 设置自动垃圾收集的阈值
git gc --quiet 安静模式执行垃圾收集
git gc --no-prune 执行垃圾收集,但不清理过期的包文件
git gc --keep-largest-pack 保留最大的包文件,不进行清理
git gc --no-keep-largest-pack 允许清理最大的包文件
git gc --strict 严格模式,检查潜在的错误
git gc --help 显示垃圾收集命令的帮助信息

Git的打包和存档功能允许用户将仓库的状态导出为一个文件,这对于备份和迁移非常有用。垃圾收集(Git GC)则是用来清理不必要的文件,优化仓库的存储和性能。

19.Git的网络操作
命令 描述
git fetch 从远程仓库获取数据但不自动合并
git pull 拉取远程仓库的数据并尝试合并到当前分支
git push 将本地分支的更改推送到远程仓库
git remote 显示或管理远程仓库的引用
git remote add 添加一个新的远程仓库
git remote rename 重命名远程仓库
git remote remove 删除远程仓库
git remote set-url 设置或更新远程仓库的URL
git ls-remote 显示远程仓库的对象信息
git remote update 更新所有远程仓库的引用
git remote show 显示远程仓库的详细信息
git remote prune 移除远程仓库中已不存在的引用
git submodule sync 同步子模块的远程URL
git submodule update --init 初始化所有子模块并更新到远程仓库的状态
git submodule foreach 对所有子模块执行命令
git ls-remote --heads 列出远程仓库的所有分支
git ls-remote --tags 列出远程仓库的所有标签
git fetch --all 从所有远程仓库获取数据
git fetch --prune 在获取数据的同时清理过时的远程跟踪分支
git push --mirror 将本地仓库的所有分支和标签推送到远程仓库,适合创建镜像仓库

网络操作是Git中用于与远程仓库交互的命令集合。这些命令允许用户共享和获取代码,以及管理远程仓库的引用。

20.Git的维护和故障排除
命令 描述
git fsck 检查Git仓库的完整性,查找丢失的对象或损坏的引用
git fsck --full 执行更彻底的检查
git fsck --no-reflogs 检查时不使用reflog文件
git prune 移除未被任何引用跟踪的对象
git gc 清理不必要的文件,优化仓库的存储
git reflog 显示本地引用的日志,用于恢复丢失的对象或提交
git update-ref 直接更新引用的目标,用于故障排除
git show-ref 显示仓库中所有引用的目标
git lost-found 恢复在清理过程中丢失的提交
git rerere 重用记录的冲突解决方案
git config 检查和修正配置问题
git help 获取Git命令的帮助信息
git --no-pager 禁止使用分页器,直接在终端中显示输出
git status 显示当前工作目录的状态
git diff 显示工作目录与最近提交的差异
git log --all --graph --decorate --oneline 显示所有分支的图形化简化历史
git branch -avv 显示所有本地和远程跟踪分支的最后提交
git clean 清除工作目录中的未跟踪文件
git stash 临时保存工作进度,允许你切换分支而不丢失未提交的更改
git bisect 二分查找引入bug的提交

维护和故障排除是Git使用过程中的重要部分,尤其是在遇到问题时。这些命令和配置选项可以帮助用户诊断问题、恢复丢失的数据、优化仓库性能以及更好地理解Git的状态。

21.Git与SVN特点对比
特性 Git SVN
架构 分布式版本控制系统 集中式版本控制系统
分支操作 轻量级,分支是提交的引用 较重量级,分支是目录的拷贝
用户体验 学习曲线陡峭,功能强大 简单易上手,对新手友好
权限控制 缺乏内置的细粒度权限控制,虽然可以通过钩子(hooks)实现一些权限控制 提供基于路径的细粒度权限控制,允许对每个文件和目录设置不同的读写权限
存储和性能 对二进制文件存储不如SVN友好 高效处理大型二进制文件
工作流程 支持多种工作流程,如集中式、功能分支、Gitflow 通常围绕一个中央仓库进行,适合企业内部多个并行项目的开发
社区和工具支持 得到GitHub等平台的推广,有庞大社区支持 稳定的用户基础,企业环境中广泛使用
适用场景 开源项目、大型项目和需要复杂版本控制的场景 企业内部项目、需要严格权限控制的项目
版本号 没有全局版本号 有全局版本号
内容完整性 使用SHA-1哈希算法确保内容完整性 不适用
锁定机制 不提供独占文件锁定 支持Lock-Modify-Unlock模型,使用svn:needs-lock属性
离线工作 支持,可以本地推送和提交代码 必须联网才能工作
合并冲突 冲突解决不再像是SVN一样的提交竞赛,而是在需要的时候才进行 冲突解决是一个提交速度的竞赛
项目管理 适合通过Internet协作的单个项目开发 适合企业内部由项目经理统一协调的多个并行项目的开发
分支管理 可以针对整个仓库作branch,一旦删除,便无法恢复 branch可以针对任何子目录,本质上是一个拷贝操作
版本号管理 使用128位ID作为版本号,需要注明是哪个branch 使用递增的序列号作为全局唯一的版本号,简明易懂
更新和还原 可以通过历史版本还原,但无法简单地实现局部还原 可以实现局部更新或者还原
安全性 无法进行权限控制,代码的可见范围受限 支持文件级权限控制,适合看重数据安全的公司

Git和SVN在面试中倒是很少会问,因为这只是一个简单的项目版本管理工具,重在实践,默认做开发都会,所以没必要写在简历中,也没必要为面试准备,主要还是要在项目中多实践,熟能生巧以及领悟各个命令的作用。

相关推荐

  1. Git知识汇总表格总结

    2024-05-02 08:00:04       27 阅读
  2. Redis知识汇总表格总结

    2024-05-02 08:00:04       29 阅读
  3. Nginx知识汇总表格总结

    2024-05-02 08:00:04       26 阅读
  4. Docker知识汇总表格总结

    2024-05-02 08:00:04       24 阅读
  5. Flask知识汇总表格总结

    2024-05-02 08:00:04       27 阅读
  6. Elasticsearch知识表格总结

    2024-05-02 08:00:04       35 阅读
  7. Apache Kafka知识表格总结

    2024-05-02 08:00:04       28 阅读
  8. Vue框架知识表格总结

    2024-05-02 08:00:04       37 阅读
  9. Apache Dubbo知识表格总结

    2024-05-02 08:00:04       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-02 08:00:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-02 08:00:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-02 08:00:04       82 阅读
  4. Python语言-面向对象

    2024-05-02 08:00:04       91 阅读

热门阅读

  1. Kylin Linux V10 SP1 aarch64部署k8s集群严重bug

    2024-05-02 08:00:04       30 阅读
  2. 探索密码学的奥秘:保护信息安全的基石与挑战

    2024-05-02 08:00:04       35 阅读
  3. iOS Airpods Pro耳机模式下视频无法播放

    2024-05-02 08:00:04       28 阅读
  4. STM32 CAN开发步骤

    2024-05-02 08:00:04       34 阅读
  5. Forrester发布2024年五大网络安全新威胁

    2024-05-02 08:00:04       34 阅读
  6. 【DevOps】Docker 详细介绍和技术原理

    2024-05-02 08:00:04       36 阅读
  7. 如何在 Apache 中创建自定义 404 页面

    2024-05-02 08:00:04       33 阅读
  8. github的注册和使用

    2024-05-02 08:00:04       31 阅读