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在面试中倒是很少会问,因为这只是一个简单的项目版本管理工具,重在实践,默认做开发都会,所以没必要写在简历中,也没必要为面试准备,主要还是要在项目中多实践,熟能生巧以及领悟各个命令的作用。
相关文章:
Git知识点汇总表格总结
Git应该是现在各个做开发公司使用最广泛的版本管理工具了,还有一些公司可能用的SVN,不过总体来说,Git绝对是主流,SVN是集中式版本管理,使用起来相对Git更简单,不过功能相对Git也略显简略,Git的优…...
漫谈:C语言 奇葩的指针定义规则
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 C语言的语法很麻拐。 初学者的…...
spring boot中一般如何使用线程池
在Spring Boot中,线程池作为并发编程的核心工具,对于提升应用程序性能、优化资源利用和保证系统稳定性具有重要作用。本文将详细阐述如何在Spring Boot中正确使用线程池,包括配置参数、实例化、任务提交、监控及常见问题处理等环节࿰…...
Shader 纹理动画和顶点动画
一、内置变量--时间 要实现动画,我们需要把时间添加到计算当中,让画面可以随着时间变化而变化。在Unity Shader提供了如下关于时间的内置变量以便于在shader中访问时间实现各种动态效果。 名称类型描述_Timefloat4t是自该场景加载开始所经过的时间&…...

使用macof发起MAC地址泛洪攻击
使用macof发起MAC地址泛洪攻击 MAC地址泛洪攻击原理: MAC地址泛洪攻击是一种针对交换机的攻击方式,目的是监听同一局域网中用户的通信数据。交换机的工作核心:端口- MAC地址映射表。这张表记录了交换机每个端口和与之相连的主机MAC地址之间…...
力扣:1979. 找出数组的最大公约数(Java)
目录 题目描述:输入:输出:代码实现: 题目描述: 给你一个整数数组 nums ,返回数组中最大数和最小数的 最大公约数 。 两个数的 最大公约数 是能够被两个数整除的最大正整数。 输入: nums [2,5,6…...

电瓶车充电桩:潜藏的暴利行业,简单入门到月入万元!
近几年来,电瓶车凭借其环保、经济特点已成为居民出行的必备工具之一。而促使电瓶车快速普及的原因之一即是电瓶车充电桩的普及。如果留心观察的话,相信大家都可以看出,国内大部分小区都已安装了充电桩设备,电瓶车充电桩已实现了大…...

mac监听 linux服务器性能可视化(Grafana+Promethus+Node_exporter)
Grafana和promethus(普罗米修斯)的安装和使用 监控系统的Prometheus类似于一个注册中心,我们可以只需要配置一个Prometheus,而在其他服务器,只需要安装node_exporter,它们的数据流转就是通过exporter采集数据信息,然后告诉prometheus它的位置…...
【负载均衡在线OJ项目日记】运行功能开发
目录 前言 运行功能开发分析 获取子进程运行信息 程序运行资源限制 运行功能开发代码 前言 上篇文章我们对客户端服务器传来的临时文件进行编译,这篇文章主要对编译成功的代码在我们的服务器运行这块功能的开发。 运行功能开发分析 在运行功能开发之前我们默…...

Qt | QLineEdit 类(行编辑器)
01、上节回顾 Qt | QComboBox(组合框)02、QLineEdit 1、QLineEdit 类是 QWidget 类的直接子类,该类实现了一个单行的 输入部件,即行编辑器,见右图 2、验证器(QValidator 类)和输入掩码简介:主要作用是验证用户输入的字符是否符合验证器 的要求,即限制对用户的输入,比…...

Mamba结构的Demo源码解读
文章目录 前言一、mamba结构构建辅助函数解读1、dataclass方法解读2、Norm归一化LayerNormRMSNormRMSNorm源码 3、nn.Parameter方法解读 二、mamba原理二、mamba模型构建1、主函数入口源码解读2、Mamba类源码解读 三、ResidualBlock的mamba结构源码解读四、MambaBlock构成Resid…...

金仓面对面 | 人大金仓×安硕信息共话金融信用风险管理数字化转型之道
金仓面对面 在数字化浪潮的推动下,人大金仓携手行业先锋,共同开启一场关于创新与转型的思想盛宴——金仓面对面。这不仅是一场对话,更是一次智慧的火花碰撞,一次行业数字化转型洞察的深度挖掘。 行业精英汇聚:我们荣幸…...
JavaScript值类型与引用类型的区别
值类型(原始类型) 值类型包括:undefined、null、boolean、number、string、symbol 和 bigint。这些类型的特点是: 存储位置:值类型的数据直接存储在栈(Stack)中。复制行为:当一个值…...

每日一博 - 闲聊架构设计中的多级缓存设计
文章目录 方法论概述客户端缓存应用层缓存服务层缓存缓存设计的注意事项总结 思维导图戳这里 方法论概述 从客户端到服务层,缓存的应用广泛而重要。通过合理的缓存设计,能够有效地提高系统的性能并降低延迟。 客户端缓存 在客户端层面,浏览…...
轻松实现MySQL集群配置:一主一从与一主多从教程
在数据驱动的时代,数据库的高可用性和负载分散成为了维护在线服务稳定运行的关键。MySQL作为世界上最流行的开源关系型数据库管理系统,其集群配置是任何DBA或开发人员必须掌握的技能之一。本文将为您详细介绍如何轻松配置MySQL的一主一从和一主多从集群&…...

Leetcode刷题-(41~45)-Java
算法是码农的基本功,也是各个大厂必考察的重点,让我们一起坚持写题吧。 遇事不决,可问春风,春风不语,即是本心。 我们在我们能力范围内,做好我们该做的事,然后相信一切都事最好的安排就可以啦…...

【Android】源码解析Activity的结构分析
源码解析Activity的结构分析 目录 1、Activity、View、Window有什么关联?2、Activity的结构构建流程3 源码解析Activity的构成 3.1 Activity的Attach方法3.2 Activity的OnCreate 4、WindowManager与View的关系总结 1、一个Activity对应几个WindowManage࿰…...

小猪APP分发:重塑应用分发市场的创新力量
在移动互联网蓬勃发展的今天,应用分发平台作为连接开发者与用户的桥梁,扮演着至关重要的角色。然而,随着市场的饱和,如何在众多平台中脱颖而出,为开发者提供更宽广的舞台,同时确保用户能够便捷、安全地获取…...

区块链 | IPFS 工作原理入门
🦊原文:What is the InterPlanetary File System (IPFS), and how does it work? 🦊写在前面:本文属于搬运博客,自己留存学习。 1 去中心化互联网 尽管万维网是一个全球性的网络,但在数据存储方面&#…...

减速机齿数速算
1.齿轮相关参数 1.1 模数 , 因为 齿数*齿距 Pi*直径 所以:直径/齿数 齿距/PI 模数 国标现行标准(截止2024/5)是: GB/ 1357-2008 / ISO 54-1996 模数有国标的一个序列标准: 1.2.轴径 轴径的国标是&a…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...

数据结构:递归的种类(Types of Recursion)
目录 尾递归(Tail Recursion) 什么是 Loop(循环)? 复杂度分析 头递归(Head Recursion) 树形递归(Tree Recursion) 线性递归(Linear Recursion)…...

使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...

sshd代码修改banner
sshd服务连接之后会收到字符串: SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢? 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头,…...