Git、GitHub学习笔记——个人使用篇
Tips:本笔记内容仅满足个人使用,可把Git和GitHub当作自己保存文件、保存版本的管理器。而本笔记未列出企业使用的场景,若想了解深入可查看学习教程。
个人推荐:Git真的很有用,一些情况真的算是救命了!有一次我不小心选中了我的“所有项目(笔记)文件夹”,然后又不小心按了shift+delete(本意不是这样的,也忘了当时想干嘛了,总之就是手抖),然后项目文件夹就永久删除了!还好,我有git,reset一下就全回来了。
而GitHub,把自己本地库的内容push上去之后,可以查看到所有更改过的内容,哪里更改了,都会标出来。另外,也方便查看某文件历史版本的样子,只要打开历史记录->此版本在主页显示,即可。
**Git:
*init、add、commit、status
git init —— 初始化
git add .(在git 2.x版本-A和.一样,而在1.x版本.不会提交删除的文件)—— 提交当前目录及其所有子目录(因为是add .而.代表当前目录)所有未被追踪文件到暂存区
git add -u 提交修改的和删除的文件到暂存区,不提交新建的文件
git add 文件名——提交某文件到暂存区
git commit -m "版本信息" (若此时只想提交暂存区中某个文件,则此处写它的文件名)—— 提交文件到本地仓库
git commit -m用于提交暂存区的文件,git commit -am用于提交跟踪过的文件(可省去重新git add .这一步操作)
git status —— 查看本地库状态
*查看历史
git log —— 查看详细版本信息(log命令显示的版本信息与github历史记录同步)
git log --pretty=oneline —— log的简洁版(去掉了Author和Date)
git reflog —— 显示历史所有操作情况,版本号比log简略
*reset恢复
git reset --hard (版本号(简略、详细版本号都可)) —— 恢复到某个版本(并清除现版本所有新东西完全恢复回该版本)
git reset --soft (版本号) —— 恢复到某版本,工作区保留现状,目标版本不存在的东西全部存于暂存区中待commit
git reset --mixed (版本号) —— 恢复到某版本,工作区保留现状,目标版本不存在的东西不放入暂存区
git reset --hard/soft/mixed HEAD^(/~1) —— 恢复到上一个版本
git reset --hard/soft/mixed HEAD~n —— 恢复到上n个版本
*在.config文件写入参数
git config --global(--local) [xxx].xxx xxx —— 在全局(当前)仓库.gitconfig(.config)文件写入参数
e.g:
Command —— git config --global --user.name (名字)
等价于在全局.gitconfig文件里写入:(我的全局.gitconfig文件在---C:\Users\Vh)
[user]
name = (名字)
git config --global --list(-l) —— 打印全局.gitconfig文件内容
git config --global(--local) --unset [xxx].xxx xxx —— (逆命令)清除.gitconfig中的xxx
*分支
git branch (分支名:hot-fix(热修))—— 新建分支(把当前分支状态完全复制) ------ a
git checkout (分支名)—— 切换分支 ------ b
git checkout -b (分支名)—— a、b命令同时进行
git checkout --orphan new_branch —— 新建一个空白分支(Tips: orphan --- 孤儿)
(“空白”——即会把原分支文件放在暂存区,但不会commit)
(若不做任何操作,再次切换回原分支,此空白分支不会保留)
git branch -v —— 查看所有分支
git branch -d (分支名)—— 普通删除分支
git branch -D (分支名)—— 强制删除分支(提示“error:分支未合并”时可用)
git merge (分支名)—— 合并分支(如当前在master分支想更改东西但不想妨碍master的运行,那么可新建分支“hot-fix”然后在新分支修改并commit后再回到master分支用merge命令可直接更新修改内容)
git branch -m 旧名字 新名字 —— 更改分支名
*本地库与远程库
本地库与远程库链接
git remote add vh (远程库html网址) 创建html远程库别名为vh
git remote -v —— 查看远程库别名
git remote rm (已存在的远程库别名)—— 删除远程库别名
本地库推送到远程库
git push vh (分支名)—— push分支“master”到远程库(vh是别名,可直接写网址)
git push vh (分支名)--force —— 强制push到远程库,否则会提交失败,报错原因:本地项目版本号低于远端仓库版本号
删除远程库某分支
git push vh :(分支名) —— 删除github上某分支
从远程库拉取内容到本地库
git pull vh (分支名)—— 从远程库拉取更新内容到本地库
git pull --rebase vh (分支名)—— 远程库同步到本地库
远程库克隆到本地库
git clone (https://xxx.git网址)—— 克隆远程库的项目到本地库
(不需要先git init,直接新建一个文件夹运行克隆命令即可)
(克隆不需要登陆账号,直接克隆即可)
(克隆自动拉取代码、初始化本地库、给被克隆链接其别名为origin)
*如何启用ssh远程库push?
Step1:git bash命令行中输入 ssh-keygen -t rsa -C "xxx@xx.com 创建ssh私/公匙
(其中的xxx是填邮箱,填github的注册邮箱即可)
(回车后会问你以下俩文件放哪,再回车默认路径即可)
(然后填写登陆密码,输入的密码有可能看不见,但你默打进去就行(再回车后会要你再打一次确认密码))
(创建后默认在x/.ssh目录中会生成id_rsa和id_rsa.pub两个文件)
(大概在global目录中,具体可以看生成时的文字提示)
Step2:进入GitHub网站,打开Settings
Step3:点击SSH and GPG keys后点击New SSH key
Step4:把id_isa.pub的内容粘贴到New SSH key的正文中,标题可随意写
Step5:命令行中输入 ssh -T git@github.com 测试SSH是否成功配置
(可能要输入一次yes或再填一次密码)
(若ssh -T git@github.com后长时间无反应,可考虑开手机关闭wifi开数据,然后开热点给电脑再次尝试)
Step6:git remote add vh-ssh (远程库ssh网址) —— 创建ssh远程库别名为vh-ssh
Step7:git push vh-ssh (分支名) —— (可能还要填密码)然后ssh push成功
*如何清除github的历史记录?(两种方法)
(假如有些东西想彻底删除,本地直接删除后push上去是不行的,因为还可以翻看历史记录找回)
法一:历史记录跳回某一个版本
原理:git的log与github的历史记录同步,所以git跳回某版本后再push到github即可
用git reset --soft (版本号)回到某版本后(再提一次:soft不会删除目标版本不存在的东西),
本地再更改到满意后(想删的删,想改的改),然后再push到远程库(会提醒版本过低,要用--force)
法二:想直接清空历史记录(此法原理:空分支的log是空的,且已知log与github的历史记录同步)
step 1:git checkout --orphan (新分支名) —— 新建并转入空分支
step 2:git commit -m "xxx" —— 空分支中原文件已自动存入暂存区,commit即可
step 3:git branch -D (原分支名)—— 强制删除原分支
step 4:git branch -m (新分支名) (原分支名)—— 重命名新分支(防止github产生新分支)
step 4:git push vh (原分支名)--force —— 强制覆盖github上的原分支(历史记录也会被“空历史记录”覆盖)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**大陆上github网络问题的解决
*什么是hosts?
a. What is hosts? hosts文件空白是不影响操作的,说到hosts文件就不得不谈到
它的作用,就是写出域名和ip的映射关系,在DNS没出来之前就是靠其工作的。
电脑想要去到哪个ip地址最先查看hosts文件,有的话就通过其对应关系解析进入
想要的域名。就像这个www.wesoullove.com,假如我给它写的对应关系是127.0.0.1
就无法进入这个域名,因为这个ip代表的就是本机地址。
b. 最新github的hosts下载地址:https://raw.hellogithub.com/hosts(下载完后替换C:\Windows\System32\drivers\etc中的hosts即可)
c. 所以如果出现网络问题,可以更新一下最新的hosts,也可以使用加速器:DevSidecar
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**常见异常与处理方法:
Command —— git push vh My_Project
*Exception —— the remote end hung up unexpectedly
Cause —— 网络问题或推送代码的大小超出了git默认的范围,可以调整git推送代码的最大值
Solution —— 执行以下命令,在.gitconfig添加参数
git config -- global http.lowspeedlimit=0
git config -- global http.lowspeedtime=999999
git config --global http.postBuffer 524288000 (设置缓存为500M)
Exception —— 添加参数后还是报一样的错
Cause —— 用http提交有上传大小限制
Solution —— 改为了ssh提交
Command —— git push vh (分支名)
*Exception —— error: failed to push some refs to '(远程库网址)'
Cause —— 远程库与本地库不一致(如单独在github上对某文件进行了更改,而不是在本地更改后再push到github上)
Solution —— git pull --rebase vh (分支名)
(先把远程库某行更新的内容同步到本地库某行(此操作不会覆盖本地已
更新待push的内容)然后再把本地待更新内容push到远程库即可)
e.g:
远程库初始: 本地库初始:
111 111
远程库被更改: 本地库:
222 111
远程库: 本地库被更改:
222 111
333
执行:git pull --rebase vh (分支名)
远程库: 本地库被同步(原更改不变):
222 222
333
执行:git push vh (分支名)
远程库被更新: 本地库:
222 222
333 333