Git的正确使用姿势 | 青训笔记

258 阅读4分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第3篇笔记

如果有错误和其他意见,麻烦留言指正💖

Git的正确使用姿势

Git是什么

Git: 版本控制,记录若干文件内容变化。

版本控制类型:(和其流行的工具)

本地版本控制   RCS  本地
集中式版本控制 SVN  远端服务器来维护,多人协作(很多游戏和美术团队仍在使用)
分布式版本控制 GIT  每个仓库都能记录版本历史,解决只有一个服务器保存版本的问题

Git发展历史

Git作者是Linux作者:Linus Torvalds(开源的)

  1. Github 全球最大代码托管平台
  2. Gitlab 全球最大开源代码托管平台
  3. Gerrit Google开发的代码托管平台, Android就在其上 ......

Git的基本命令

项目初始化:

mkdir demo
cd demo
git init
tree .git

在新文件夹下初始化init,默认现在处于在master分支下

image.png

cat .git/HEAD 查看当前分支

image.png

工作区和暂存区

配置 Git config

不同级别的配置,每个级别配置可能重复,但是低级别配置会覆盖高级别配置

--global  //第二高
--system //最高
--local  // 本地

常见Git配置:

  1. 用户名配置:(必)
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
  1. Instead of 配置 git config --global url.git@github.com:.insteadOf http://github.com/ 做URL替换,如把ssh协议换成http协议

  2. 命令别名配置(可加) alias.* 用来设置别名,一般用于简化命令,例如:

git config --global alias.cin "commit --amend --no-edit"

用于简化命令,以后用cin 替换commit..这段命令

远程仓库 Git Remote 配置

查看Remotegit remote -v 添加Remote

git remote add origin_ssh git@github.com:git/git.git
git remote add origin_http https://github.com/git/git.git

然后查看remote:

image.png

表示源

这个时候输入cat .git/config

image.png

可以看到两个remote的配置修改,每个Remote命令本质上都是在config上修改的

Tips: 打错了的话可以输入git remote -h 即help 查看remove的修改命令把打错的修改回来

免密配置

  1. HTTP Remote (可能没那么安全,没那么方便,不推荐)

  2. ssh Remote(从而实现本地连接上远端代码管理) 通过公钥秘钥机制,将生成的公钥存放在服务器,从而实现免密登录。(同于ssh登录远程云服务器)

目前Key的四种类型:dsa, rsa, ecdsa, ed25519, 默认使用rsa

终端指令:ssh-keygen -t ed25519 -C "your_email@example.com"然后回车

此时密钥默认存在 cat ~/.ssh/id_ed25519.pub

复制这段公钥存到github上(setting - ssh and GPc kekys - new ssh - add ssh_key ......)

提交代码

基本操作

  1. git add 添加文件(git add . 是添加本地全部)
  2. git status 查看现状

image.png

image.png

image.png

  1. 可以通过命令直接查看文件内容: git cat-file -p <object下的文件夹名><文件id>

  2. git commit -m "version_name"提交版本

  3. git log 查看所有提交的树

image.png

  1. 分支
git checkout -b branch_name 创建并切换到branch_name这个分支
git branch branch_name     创建新分支
git checkout branch_name   切换到branch_name这个分支

tree .git看创建新分支后的区别

image.png

image.png

  1. ref 指针向对应的commit版本, branch分支用于开发阶段可以不断添加,Tag表示稳定版本,一般不会变更,用于发布版本 用 git tag Vx.x.x 发布tag

image.png

git tag -a vx.x.x -m "附注内容"给tag创建附注标签

image.png

版本

追溯历史版本

  1. 获取当前版本 (通过ref指向的commit获取唯一的代码版本)
  2. 获取历史版本 (通过commit串联历史版本)
git reset --hard HEAD^:   将代码库回滚到上一个版本
git reset --hard HEAD^^:  往上回滚两次,以此类推
git reset --hard HEAD~100:往上回滚100个版本
git reset --hard 版本号:   回滚到某一特定版本

修改历史版本:

  1. git commit --amend 修改最近一次的commit信息(修改之后commit的id会变)

image.png

注:第一行"readme2"是commit -m 的"version_name"

Git GC

  1. GC: 通过git gc 命令删除不需要的一些object,以及对object进行一些打包压缩。

  2. reflog reflog用于记录操作日志,防止误删后数据丢失。

  3. 指定时间

操作:

git reflog expire --expire=now --all
git gc --prune=now

image.png

image.png

打包了object成压缩后格式,删除了不需要的object

(以上都为本地管理)

远端同步

Git clone & Pull & Fetch

  1. clone 拉取
  2. Fetch 将远端分支不合并,会修改refs/remote内的分支信息
  3. Pull 拉取远端分支并合并 (= git ferch + git merge branch_name, 可能会冲突,所以推荐上)

GIT push

  1. 常用命令 git push -u (第一次需要-u以后不需要):将当前分支推送到远程仓库

git push origin branch_name :将本地的某个分支推送到远程仓库

  1. 冲突问题 可以通过git push origin -f来强推(团队确认后,且一般不会在主干分支进行)