跳转至

Git

936 个字 58 行代码 预计阅读时间 4 分钟

原理

missing semester

版本控制 (Git) · the missing semester of your cs education

6. Lecture 6 - 版本控制 git_ 哔哩哔哩 _bilibili

使用

个人使用:init、rm、commit、push、pull

git init
git remote -v
git remote add origin + ssh
git remote rm origin 

git pull origin [branch]:[master]
git add .
git commit -m ""
git push origin [master]:[branch]

# 本地初始化项目
git config --global user.name "你的名字或昵称"
git config --global user.email "你的邮箱"

3a2a4da685d8aaa34d486ac6

分支操作 : branch、checkout、merge

# 创建分支、更改
git checkout -b <branch_name>
git branch -a
git branch -d <branch_name> //删除分支

a16f42f5af389230d4b27c7c

回退

查看详细历史记录
git log

git log --pretty=oneline
格式化log形式,每条log只有一行,只包含 完整的hash值 和 提交的备注;
只展示最新的几条日志
git log -n 3
展示历史分支路线
git log --graph
回退任意版本
git reset --hard + commit_id
git reset --hard HEAD^ 

只能后退,一个 ^ 表示回退一个版本,两个 ^ 表示回退两个版本,依次类推

回退 n 个版本
git reset --hard HEAD~n

Pull Request

PR, 全称 Pull Request(拉取请求,是一种非常重要的协作机制

  1. fork 原仓库 A 到我的仓库 BB A fork 版本)
  2. 将仓库 B clone 到我本地电脑
  3. 在本地创建一个分支,如 bugfix/issue-12,该分支用于存放我的代码修改。同时在我的 github 上的仓库 B 也创建一个同名的该分支
  4. 切换到该分支 bugfix/issue-12,修改代码
git checkout -b bugfix/issue-12
  1. 修改好了,add,commit,然后 push 到我远程的仓库 B bugfix/issue-12 分支

git push -u origin bugfix/issue-12
1. 在我的github的仓库B中创建pull request。选择仓库B的该分支,推送到原仓库A的某一个分支。具体是哪个分支,参考仓库A的contributing说明,一般是dev分支;如果没说,就只能选择master分支咯

【Git】PR 是啥?一篇文章学会 Pull Request 到底是干嘛的 _github pull request-CSDN 博客

git commit规范

为了方便使用,我们避免了过于复杂的规定,格式较为简单且不限制中英文:

<type>(<scope>): <subject>
// 注意冒号 : 后有空格
// 如 feat(miniprogram): 增加了小程序模板消息相关功能

scope 选填表示 commit 的作用范围,如数据层、视图层,也可以是目录名称

subject 必填用于对 commit 进行简短的描述

type 必填表示提交类型,值有以下几种:

  • feat - 新功能 feature
  • fix - 修复 bug
  • docs - 文档注释
  • style - 代码格式 ( 不影响代码运行的变动 )
  • refactor - 重构、优化 ( 既不增加新功能,也不是修复 bug)
  • perf - 性能优化
  • test - 增加测试
  • chore - 构建过程或辅助工具的变动
  • revert - 回退
  • build - 打包

参考网址

四个命令了解 git

多人协作流程

Git 操作详解以及在 VScode 中的使用

配置

git 的安装

创建个人令牌

github 创建个人令牌

Setting 
-> Developer settings
-> Personal access tokens 
-> Generate new token 保存密码到自己可以看到的位置 

免密登陆

git 保存密码

# 记住密码 
git config --global credential.helper store  
# 删除密码 
git config --global --unset credential.helper 

github 配置 ssh

cd ~
ssh-keygen -t rsa -C "xxx@xxx.com" # 这里输入你的邮箱
cd .ssh
cat id_rsa.pub # 复制到github的ssh设置中
点击右上角的settings 将刚才复制的内容粘贴到这里

验证是否成功

ssh -T git@github.com
显示如下信息表明设置成功

SSH

  • 连接虚拟机

win 系统使用 vscode 连接虚拟机

$ ifconfig #记录ip地址 
$ ssh user.name@ip 

设置 ssh 免密登录

win 主机上ssh-keygen生成一对公私钥,将公钥发送到服务器的~/.ssh/authorized_keys文件下

win 主机上的 ssh 配置中加入IdentityFile文件,即可实现免密登录

理解公钥和私钥

问题与解决

连接不上port 443 Couldn‘t connect to server

  • 方案一:关闭 VPN
  • 方案二:取消代理
    git config --global --unset http.proxy
    git config --global --unset https.proxy
    

拒绝连接connect to host github.com port 22: Connection refused

  • 使用github 443 端口

~/.ssh/config文件里添加如下内容,这样 ssh 连接 GitHub 的时候就会使用 443 端口。

Host github.com
  Hostname ssh.github.com
  Port 443
  • httpsgit链接换着试试
url = https://github.com/username/repo.git
url = git@github.com:username/repo.git
  • 换梯子节点,检查 DNS 污染

推送失败src refspec master does not match any

按照下面的顺序执行

$ git commit -m "init"
$ git remote add origin xxxxxxxx.git
$ git push -u origin master

远端链接失败fatal: Couldn‘t find remote ref master

# 检查本地配置
git config user.name/git config --global user.name
git config user.email/git config --gloabl user.email

# 检查仓库配置
git remote -v
git remote rm origin
git remote add origin XXXX

文件过大RPC failed;curl 56 Recv failure: Connection was reset

git config --global http.postBuffer 524288000

如果设置之后提交还是报错的话,可能是因为某几个文件过大造成的;

这时就需要用到 git-lfs 具体用法见官网

git lfs install
git lfs track "*.so"
git add .gitattributes

Host key verification failed.

重新配置一下 ssh,删除~/.ssh文件夹,重新生成 ssh key,然后再次连接。

具体操作看配置/github 配置ssh一节