😒Git-GitHub-操作问题和经验
Git-GitHub-操作问题和经验
实用操作
三种合并方式
- 设当前 git-status:
graph LR A --> B B --master--> C --> D --> E --> F --> G B -.dev.-> C1 subgraph merge-target C1 --> D1 --> E1 --> F1 end
merge
合大分支常用
保留所有 commit 信息,merge 操作生成一个 merge-commit
graph LR
A --> B
B --master--> C
B -.dev.-> C1
C --> D --> E --> F --> C1'
subgraph before-merge
C1 --> D1 --> E1 --> F1
end
F1 .-> C1'
subgraph after-merge
C1'[C1] --> D1'[D1] --> E1'[E1] --> F1'[F1]
end
F1' --> G
squash
压缩合并, 将几次提交的信息合并, 很不常用
需手动提交所以会改变 commit-user [1]
适用场景为: 同一开发者负责的两 branch, 并且被合并的 branch 记录并不重要
graph LR
A --> B
B --master--> C
B -.dev.-> C1
subgraph before-merge
C1 --> D1 --> E1 --> F1
end
F1 .-> C1-F1
C --> D --> E --> F --> G
subgraph after-merge
C1-F1
end
G --> C1-F1
rebase
rebase 变基不会像 squash 那样变更 commit-user 信息, 而且 commit 的合并是手动选择性的
常用于在某一 pull request 内的分支合并
比如下面合并 commit D1 和 E1, 然后 rebase
总图
graph LR A --> B --master--> C --> D --> E --> F F -.dev.-> C1' B -.dev.-> C1 subgraph before-merge C1 --> D1 --> E1 --> F1 end F1 .-> C1' subgraph rebase C1'[C1] --> D1-E1 --> F1'[F1] end F --master--> C1'' F1' .-> C1'' subgraph after-merge C1''[C1] --> D1-E1'[D1-E1] --> F1''[F1] end F1'' --> G分三步图
graph LR A --> B B --master--> C --> D --> E --> F B -.dev.-> C1 subgraph before-merge C1 --> D1 --> E1 --> F1 end F --> G
graph LR
A --> B --master--> C --> D --> E --> F
F -.dev.-> C1'
B -.dev.-> C1
subgraph before-merge
C1 --> D1 --> E1 --> F1
end
F1 .-> C1'
subgraph rebase
C1'[C1] --> D1-E1 --> F1'[F1]
end
F --master--> G
graph LR
A --> B --master--> C --> D --> E --> F
F --> C1'
B -.dev.-> C1
subgraph before-merge
C1 --> D1 --> E1 --> F1
end
subgraph after-merge
C1' --> D1-E1 --> F1'
end
F1' --> G
配置代理
有时候 github 会被墙,导致无法推送,需要挂代理
方案:
git config --global https.proxy http://127.0.0.1:1080
或者直接修改
~/.gitconfig文件[core]
autocrlf = true
longpaths = true
editor = code.exe
[user]
name = Weidows
email = utsuko27@qq.com
[http]
proxy = localhost://127.0.0.1:7890
[https]
proxy = localhost://127.0.0.1:7890
版本回退
不小心把 ssh 私钥 copy 到了 git 库里提到了 github 上,差点 GG
- reset 到出错提交的前一个提交
- 修改,提交
- 强制提交(不强制的话不行): git push origin master -f
缩小仓库体积
删除提交记录
有的仓库因为有时候会提交图片,导致仓库体积格外的庞大
而且大到一定程度会被平台检查 (所以要想办法缩小)
我要压缩的是 Keeper 项目
因为每天都要提交一张必应壁纸,所以一年下来体积到了 400+ MB
我想把壁纸拿走,并且把 git 中提交记录也删掉以抹除体积
开始我想的是把现有文件复制到一个新建的库,再把这个库 force push 到 github
出乎意料,旧的提交并没有消失; 可以看到强推
重构前面有一个断档,那之前的就是旧提交为什么出现这情况? 我给画了个图
所以,原因是没删除 github 上的 tags,删掉就没了捏
分支独立法
起初使用的是上面的方法,后来突然想到把这些大文件独立分支
当需要减小体积时,本地保留好当前内容然后直接删除分支
再重新拉起一个同名分支 force push
这个方法应该更好些,避免删除不必要内容.
GitHub
首页绿格子
- Github 不显示 fork 仓库的 commit, 需要独立出来
License-choice
一般盲怼 MIT 就好,不过上图没给出
感觉菜鸟教程的文章最详细: 各种开源协议介绍
pages-域名
GitHub 与 Gitee-pages 部署域名规则不同.
github 上当且仅当 Repo 名字为
userName.github.io时,域名为userName.github.io- 其他 Repo 名字为
userName.github.io/repoName/
- 其他 Repo 名字为
Gitee 是当且仅当 Repo 名字为
userName.gitee.io时,域名为userName.gitee.io- 否则类似上面
删除远程分支
- 不能删除当前默认分支.
github-action
checkout

checkout 默认下只会检出默认分支,不会 clone submodules,可以设置自定义
- name: Clone repository
uses: actions/checkout@v2
with:
ref: dev # checkout dev branch
submodules: true
国内时区错位问题
- 我在东八区,布置的 GitHub Action 是 0 点执行
- 结果是在早上八点多才执行的(大概是八点半左右,误差<5min)
- 因为 GitHub 服务器不是在国内,时区不同,其对应的大概是欧洲伦敦那块的标准时区.
结论:布置 Action 定时任务时,设置的时间要早八个小时(对应东八区)
error-when-deploy2server
github action upload files to server via ssh, 本地可以, 但 action 不行
一定要加上最后的 StrictHostKeyChecking=no
bzip2: I/O or other error, bailing out. Possible reason follows. |
ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no |
JsDelivr-刷新缓存
把
fastly.jsdelivr.net换为purge.jsdelivr.net访问几次 [2]
返回的 JSON 显示 cdn 更新时间戳
{
"id": "0p2xZacfrSQPrdsO",
"status": "finished",
"timestamp": "2022-03-26T05:31:48.172Z",
"paths": {
"/gh/Weidows-projects/live2d-moc3/dist/live2d.min.js": {
"throttled": true,
"throttlingReset": 3554
}
}
}最近测试似乎失效了…
ssh-config-github-多账号
# GitHub Personal Account |
Gitlab
pipeline-error
remote: You are not allowed to download code from this project.
去 Manage -> Members 添加触发运行的用户才可以
凭证和权限
credential-store
如果不保存凭据, 每次 push 都要输用户名和密码, 很烦人
服务器如果不考虑安全问题, 也可以这么用
git config --global credential.helper store |
凭据失效
无权限推送到 xxx 仓库
github 删除 ~/.git-credentials
gitlab 去控制面板-凭据管理器删除对应凭据














