Git是分布式代码托管的标杆,这里将提供如何学习Git,以及Git工作流的总结,和常用的操作命令。
Git 下载
Windows 版本:https://git-scm.com/download/win
Mac版本:https://git-scm.com/download/mac
Git 入门
关于 Git 入门,只推荐一本书、一个在线学习网站和一些扩展资料。
书籍推荐:Git Pro 2
- Git Pro2 英文 Github 仓库(opens new window)
- Git Pro2 中文 Gitbook(opens new window)
- Git Pro2 对应的中文 Markdown 版本的仓库地址(opens new window)
- Git Pro 中文阅读
其他资料:
- Git 菜鸟教程
- 99%的时间在使用的 Git 命令(opens new window)
- Git 分支开发模型规范(opens new window)
- Git - 简明指南(opens new window)
- 图解 Git(opens new window)
- 廖雪峰 : Git 教程(opens new window)
- 《Git快速入门:learn-github-from-zero》.pdf
一个在线学习网站:
通过中央服务器来保存所有文件的修订版本,可怕的缺憾是如果中央服务器宕机或单点故障,将导致开发暂停,无法提交和拉取。集中化版本控制系统存储的是差异。
- 分布式版本控制系统 BitKeeper、Git等
客户端并不只是提取最新版本的文件快照,而是把代码仓库完整的镜像下来。底层通过极致的压缩解压算法可以实现了虽然拷贝整个历史版本也不会增加很多的数据下载。每个服务器都是客户端,每个客户端都是服务器。分布式版本控制系统存储的则是文件镜像。
Git 本地结构
工作区(coding 的地方)—暂存区(临时存储的区域)—本地库(存储的历史版本信息)
Git 协作
Git 基础指令
配置
//--global 当前用户 --system 系统权限
git config --global user.name
git config --global user.email
git config --global core.editor code -w git默认编辑器为vscode
git config --global core.pager ''
git config --global list 查看所有配置
// 别名快捷操作
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.mg merge
分支
git init 初始化本地文件夹,创建git仓库,默认创建 git config --global init.defaultBranch 配置的名字,默认为master
git branch [-v]
git branch [branch name]
git checkout [branch name]
git branch -m xxx 重新命名当前分支
git clone url renameA 克隆远程仓库到本地并以 renameA 名字重新命名本地仓库
git merge [dev] 在master主分支合并dev分支内容
注意本地化仓库,只有提交一次到版本库,才可以切换分支或创建分支。
状态
git status -s 用紧凑的方式格式输出信息
git diff 工作区和暂存区所有文件进行比较
git diff [文件名] 工作区和暂存区[文件名]进行比较
git diff [历史版本索引] [文件名] 暂存区和本地库进行比较
git diff --cached/--staged 查看已暂存的将要添加到下次提交的具体内容
git difftool --tool-help 查看系统支持哪些 git diff 插件。
git commit -m "note" 用注释提交
git commit -a “note" 跳过暂存区直接提交(不需要 git add .了)
git rm [file] 从暂存区、本地都删除[file]
git rm -f xxx 强制删除
git rm --cached [file] 将[file]从暂存区移除但工作区依旧存在
git rm log/\*.log 删除log目录下 *.log 的所有文件
git rm \*~ 删除以~为结尾的所有文件
git mv README.md READYOU.md 重命名,将 README 改为 READYOU
git stash 暂存
git stash list
git stash apply 还原代码
git stash drop [ID] 删除暂存区记录[ID]
git stash pop 等于 git stash apply 和 git stash drop
git stash clear 清除
历史
数字的含义:指针回到当前这个历史版本需要走多少步
git log 多页日志冒号后输入空格下一页,b上一页
git log --oneline git log --pretty=oneline git reflog
git log -p -2 显示最近两次提交差异
git log --stat 简略的统计信息
git reset --hard [xxx索引] 回退到[xxx索引](工作区和暂存区也一起变化)
git reset --mixed [xxx索引] 回退到[xxx索引](暂存区也一起变化,但工作区不跟随变化)
git reset --soft [xxx索引] 回退到[xxx索引](暂存区、工作区不跟随变化)
远程仓库
git remote [-v] 查看远程库仓库名
git remote add [remote name] [url] 为[url]远程库起别名[remote name]
git push [remote name] [local branch] 向[remote name]推送[local branch]
git fetch [remote name] [local branch] 从远程库抓取到本地分支(在抓取操作执行后,只是将远程库的内容下载到本地库,但是工作区中的文件没有更新。
git checkout [remote name]/[remote branch] 查看远程库中的分支
git merge [remote name]/[remote branch] 合并远程分支到本地分支
git pull [remote name] [remote branch] 远程库拉取操作 pull=fetch+merge操作
git pull [remote url] [remote branch] --allow-unrelated-histories 解决本地库和远程库有不同的开始点,允许不相关历史合并。
git push -u [remote url] [local branch] -f 第一次强制推送
SSH 连接
- git config —global —list查看用户名和邮箱是否配置,若没有配置则进行配置(git config —global user.name xxx; git config —global user.email xxxx)
- ssh-keygen -t rsa -C xxx(邮箱)
- id_rsa.pub里面的内容复制到github中 Settings-SSH and GPG keys
多账号远程连接
删除本地凭据github账号缓存(模拟多账户推送的时候)
Github 邀请别人加入团队,仓库 repo-Settings-Manage access-Invite a collaborator远程仓库拉取分支不全解决
Git 异常处理
单文件超100M
当单个文件超过100M,git add 到暂存区并Commit了,执行如下操作,“06企业级项目/381/381-LV2018Project-20210927.zip”这个为超过大小的文件名。(此问题处理解决方案链接)。 ```git git filter-branch —force —index-filter ‘git rm -rf —cached —ignore-unmatch 06企业级项目/381/381-LV2018Project-20210927.zip’ —prune-empty —tag-name-filter cat — —all
git commit —amend -CHEAD
git push origin master —force
此外还需要删除本地缓存对象,避免出错;依次执行: rm -rf .git/refs/original/
git reflog expire —expire=now —all
git gc —prune=now
<a name="HfCKy"></a>
### 远程仓库拉取分支不全解决
```git
git branch
会出现:
* master
git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/develop
remotes/origin/feature
remotes/origin/master
git checkout -b feature origin/feature
Git Ignore
github有一个十分详细的针对数十种及语言的 .gitignore 文件列表,https://github.com/gitgithub/gitignore 找到。
Github 实用技巧
Github 搜索技巧
按 S 聚焦到搜索框 xxx stars:>1000 pushed:>2022-05-16 language:Java 进入高级搜索页面https://github.com/search/advanced。GitHub Docs 里面还有更多的限定关键词 https://docs.github.com/cn/search-github/searching-on-github/searching-for-repositories。
Github 文件快速查阅
- Octotree 插件
- ctrl+k 打开 Github 命令面板
- 按 。 键可以打开网页版VS Code
Github 在线运行项目
在项目地址前加上 https://gitpod.io/github.com/xxxx 可以自动识别项目类型和依赖包等。Build Image 一键构建Docker镜像。
Github 项目推送
Get email updates 可以获得最新的项目推送。
GUI 工具推荐
这里推荐三个工具:Git SourceTree、GitExtensions、GitHub Desktop。
Git SourceTree
使用注意点
- 在使用SSH时候,需要在工具-选项-OpenSSH