Git是分布式代码托管的标杆,这里将提供如何学习Git,以及Git工作流的总结,和常用的操作命令。

Git 下载

Windows 版本:https://git-scm.com/download/win
Mac版本:https://git-scm.com/download/mac

Git 入门

关于 Git 入门,只推荐一本书、一个在线学习网站和一些扩展资料。
书籍推荐:Git Pro 2

其他资料:

一个在线学习网站:

  • Learn Git Branch

    Git 介绍

    Git 概念

    Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的项目。

    Git 发展史

  • 集中化版本控制系统 CVS、SVN、Perforce等

通过中央服务器来保存所有文件的修订版本,可怕的缺憾是如果中央服务器宕机或单点故障,将导致开发暂停,无法提交和拉取。集中化版本控制系统存储的是差异。
image.png

  • 分布式版本控制系统 BitKeeper、Git等

客户端并不只是提取最新版本的文件快照,而是把代码仓库完整的镜像下来。底层通过极致的压缩解压算法可以实现了虽然拷贝整个历史版本也不会增加很多的数据下载。每个服务器都是客户端,每个客户端都是服务器。分布式版本控制系统存储的则是文件镜像。
image.png

Git 本地结构

工作区(coding 的地方)—暂存区(临时存储的区域)—本地库(存储的历史版本信息)

Git 协作

image.pngimage.png

Git 基础指令

配置

  1. //--global 当前用户 --system 系统权限
  2. git config --global user.name
  3. git config --global user.email
  4. git config --global core.editor code -w git默认编辑器为vscode
  5. git config --global core.pager ''
  6. git config --global list 查看所有配置
  7. // 别名快捷操作
  8. git config --global alias.co checkout
  9. git config --global alias.br branch
  10. git config --global alias.ci commit
  11. git config --global alias.st status
  12. git config --global alias.mg merge

分支

  1. git init 初始化本地文件夹,创建git仓库,默认创建 git config --global init.defaultBranch 配置的名字,默认为master
  2. git branch [-v]
  3. git branch [branch name]
  4. git checkout [branch name]
  5. git branch -m xxx 重新命名当前分支
  6. git clone url renameA 克隆远程仓库到本地并以 renameA 名字重新命名本地仓库
  7. git merge [dev] master主分支合并dev分支内容

注意本地化仓库,只有提交一次到版本库,才可以切换分支或创建分支。

状态

  1. git status -s 用紧凑的方式格式输出信息
  2. git diff 工作区和暂存区所有文件进行比较
  3. git diff [文件名] 工作区和暂存区[文件名]进行比较
  4. git diff [历史版本索引] [文件名] 暂存区和本地库进行比较
  5. git diff --cached/--staged 查看已暂存的将要添加到下次提交的具体内容
  6. git difftool --tool-help 查看系统支持哪些 git diff 插件。
  7. git commit -m "note" 用注释提交
  8. git commit -a note" 跳过暂存区直接提交(不需要 git add .了)
  9. git rm [file] 从暂存区、本地都删除[file]
  10. git rm -f xxx 强制删除
  11. git rm --cached [file] 将[file]从暂存区移除但工作区依旧存在
  12. git rm log/\*.log 删除log目录下 *.log 的所有文件
  13. git rm \*~ 删除以~为结尾的所有文件
  14. git mv README.md READYOU.md 重命名,将 README 改为 READYOU
  15. git stash 暂存
  16. git stash list
  17. git stash apply 还原代码
  18. git stash drop [ID] 删除暂存区记录[ID]
  19. git stash pop 等于 git stash apply 和 git stash drop
  20. git stash clear 清除

历史

image.png
数字的含义:指针回到当前这个历史版本需要走多少步

  1. git log 多页日志冒号后输入空格下一页,b上一页
  2. git log --oneline git log --pretty=oneline git reflog
  3. git log -p -2 显示最近两次提交差异
  4. git log --stat 简略的统计信息
  5. git reset --hard [xxx索引] 回退到[xxx索引](工作区和暂存区也一起变化)
  6. git reset --mixed [xxx索引] 回退到[xxx索引](暂存区也一起变化,但工作区不跟随变化)
  7. git reset --soft [xxx索引] 回退到[xxx索引](暂存区、工作区不跟随变化)

远程仓库

  1. git remote [-v] 查看远程库仓库名
  2. git remote add [remote name] [url] 为[url]远程库起别名[remote name]
  3. git push [remote name] [local branch] 向[remote name]推送[local branch]
  4. git fetch [remote name] [local branch] 从远程库抓取到本地分支(在抓取操作执行后,只是将远程库的内容下载到本地库,但是工作区中的文件没有更新。
  5. git checkout [remote name]/[remote branch] 查看远程库中的分支
  6. git merge [remote name]/[remote branch] 合并远程分支到本地分支
  7. git pull [remote name] [remote branch] 远程库拉取操作 pull=fetch+merge操作
  8. git pull [remote url] [remote branch] --allow-unrelated-histories 解决本地库和远程库有不同的开始点,允许不相关历史合并。
  9. 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
    image.pngimage.png

    远程仓库拉取分支不全解决

    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

  1. <a name="HfCKy"></a>
  2. ### 远程仓库拉取分支不全解决
  3. ```git
  4. git branch
  5. 会出现:
  6. * master
  7. git branch -a
  8. * master
  9. remotes/origin/HEAD -> origin/master
  10. remotes/origin/develop
  11. remotes/origin/feature
  12. remotes/origin/master
  13. 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
image.png

Github 文件快速查阅

  • Octotree 插件
  • ctrl+k 打开 Github 命令面板
  • 按 。 键可以打开网页版VS Code

image.png

Github 在线运行项目

在项目地址前加上 https://gitpod.io/github.com/xxxx 可以自动识别项目类型和依赖包等。Build Image 一键构建Docker镜像。

Github 项目推送

Get email updates 可以获得最新的项目推送。
image.png

GUI 工具推荐

这里推荐三个工具:Git SourceTree、GitExtensions、GitHub Desktop。

Git SourceTree

使用注意点

  • 在使用SSH时候,需要在工具-选项-OpenSSH

image.png