❤ Git 的安装和使用
一、 Git 认识
Git官网https://git-scm.com/downloads
https://git-scm.com/
Git历史版本
https://registry.npmmirror.com/binary.html?path=git-for-windows/
(1) Git安装配置(windows)
初次安装git,直接一键安装
…略过
(2)配置用户名和邮箱
$ git config --global user.name “xxxx”
$ git config --global user.email “xxx@qq.com”
(3)代码库中SSH配置以及拉取远程项目进行开发
1.生成SSH Key
ssh-keygen -t xxx -C “你的邮箱@xx.com”
ssh-keygen –t rsa –C “你的邮箱@xx.com”【我用的这个】
回车选择默认即可
2.打开.ssh文件,找到key保存的位置,并复制key
cd ~/.ssh
ls即list,列出当前列出当前目录中的文件(不包含隐藏文件),ls -a(包含隐藏文件),ll 更详细
ls ll
- cat XXX 打开和查看文件
- cat id_ed25519.pub
- 复制里面的公钥
- 然后将公钥直接复制到个人的那个github上
(4)操作Github库
git创建一个项目的过程
————————————————
git创建一个项目的过程
————————————————
$ makdir ~/hello-world //创建一个项目hello-world
$ cd ~/hello-world //打开这个项目
$ git init //初始化项目
$ touch README
$ git add README //更新README文件
$ git commit -m 'committext' //提交更新,并注释信息“committext”
$ git remote add origin git@github.com:xxxxxxxxx //连接远程github项目
$ git push -u origin master //将本地项目更新到github项目上去
————————————————
二、Git 常用命令
git init // 项目初始化
添加和提交到仓库
git add README.txt // 添加
git status // 提交前查看状态
git commit -m "name" // 提交
git status // 提交后查看仓库状态
git diff readme.txt // 查看文件更改前后的内容变化
git commit --no-verify -m “提交时的注释” // git 上传时出现语法检查,强制提交
版本回退
// 现在->过去
git log // 查看历史记录
git log --prettry=oneline // 查看历史记录-简易版
git reset --hard HEAD^ // 回退到上一个版本
git reset --hard HEAD~10 // 回退到第前10个版本
// 过去->现在
git reflog // 获得所有提交命令的版本号
git reset --hard <commit id> // 通过版本号回到现在
缓存区和暂存区
git add file1 file2 file3 // 添加到缓存区
git add . // 添加全部修改文件
git commit -m "name" // 一次性提交多个文件
撤销和删除文件
// 文件内容有误,需要恢复到之前的版本:可以手动更改在commit,也可以回到HEAD^版本,本文介绍第三种方法
// - version1:没有加入到暂存区
git status // 查看哪个文件被更改了
git checkout --filename // 撤销这个文件的更改
// - version2: 已经加入到暂存区
git reset --hard HEAD^ // 先返回到上一版本(暂存区->工作区)
git checkout --filename // 撤销这个文件的更改
rm filename // 从工作区删除filename
git rm filename // 从版本库删除filename
git checkout -- filename // 恢复删除的filename
远程仓库
ssh-keygen -t rsa –C “youremail@example.com” // 建立github和本地电脑的SSH Key链接
// 本地->GitHub
git remote add origin 地址 // 关联一个GitHub
git push -u origin master // 本地内容推送到GitHub(第一次用)
git push origin master // 以后每次提交用
// GitHub->本地
git clone git地址
git pull origin master // 拉取最新主分支代码
// origin/master 比较本地的仓库和远程仓库的区别
git log -p master
创建和合并分支
git checkout -b feature1 // 创建并切换到feature1分支
git branch // 查看当前所有分支
git checkout master // 切换到主分支
git merge feature1 // 合并master和feature1分支:fast-mode模式
git merge --no-ff -m "merge with no-ff" <name> // 合并分支,并且留下信息说明我在这里合并过
git branch -d feature1 // 删除feature1分支
// 解决合并冲突
git log --graph --pretty=oneline --abbrev-commit // 树状图查看分支情况
三、Git 远程操控Gitee仓库
(1)已有仓库最常见命令
git clone XXX (xxx就是你的仓库地址---假设你没仓库代码)
// 更改代码以后
git add . //提交更新到本机缓存上(暂存)
git commit -m "注释" // 理解为提交并注释 (git commit -m -t 不注释直接提交 )
git push //推送到远程
//有更新再次拉取 --每次代码一定先拉取,防止冲突
git pull //拉取代码 不成功试试多拉取几次
(2)第一次创建 git 仓库并操作gitee库
- Git 全局设置
//设置你的账号密码
git config --global user.name "Lourance"
git config --global user.email ""
- 创建 git 仓库
mkdir amazon
cd amazon
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin https://gitee.com/..... //你的仓库地址项目地址
git push -u origin "master"
3.拉取提交(首次不用git pull)
git pull //拉取项目
git add .
git commit -m -t
git push
(2) 已有仓库
cd 项目
git remote add origin https........项目地址
git push -u origin "master"
git status 查看状态
git rm -rf a.txt //推送删除的文件
git fetch origin //更新本地的远程分支
git log master..origin/master // 本地与远程的差集
git diff --stat master origin/master //查看差异
(3)git 更新远程代码更新到本地
git remote -v
从远程获取最新版本到本地
git fetch origin master
这句的意思是:从远程的origin仓库的
master分支下载代码到本地的origin master
(4) git 强制更新并覆盖本地修改
1.git fetch --all //从远程拉取最新的代码 不merge
2.git reset --hard origin/develop //使用指定分支的代码(此处develop)强制覆盖代码
3.git pull //从远程拉取最新的代码 自动merge
git windows端提交时出现crlf
$git config --global core.autocrlf true
(5) 将本地仓库和远程仓库进行关联
git branch(查看当前的分支是哪个,一般拉下来是master分支)
git remote add origin https://gitee.com/lourance/spefvue.git
git add
git commit -m "first commit"
git push -u origin "master"
git pull
git checkout -b 分支名 创建并切换分支
第二次进行更新和提交
git add .(这句是将代码暂存到本地,注意add后要空格再有点)
git commit -m ‘内容’(这个内容一般是你对代码做了哪些修改)
git push origin "master" 你的分支名(就是第二点那个分支名)
(6) GIT合并分支
① 使用merge命令合并分支
将dev分支合并到master分支
- 首先切换到master分支上
git checkout master
- 把远程master上的代码pull下来
git pull origin master
- 然后我们把dev分支的代码合并到master上
git merge dev
//如果有冲突,手动解决冲突就行
- 然后查看状态及执行提交命令
git status
On branch master Your branch is ahead of 'origin/master' by 15 commits. (use "git push" to publish your >local commits) nothing to
commit, working tree clean
意思: //上面的意思就是你有15个commit,需要push到远程master上
- 执行下面提交命令
git push origin master
② 合并某个分支上的单个commit(cherry-pick命令)
场景: 合并某个 分支上的单个commit ,并且你现在只需要将这个单个commit 合并到master,而不合并分支上的其他commits;
我们用git cherry-pick命令来做
git checkout master
git cherry-pick 82ecb31
这样就将单个分支合并到master分支,并在master中添加了commit(作为一个新的commit)。
cherry-pick和merge比较类似,如果git不能合并代码改动(比如遇到合并冲突),git需要你自己来解决冲突并手动添加commit。
这里git cherry-pick每次合并过来会显示文件冲突(其实并没有冲突代码部分,只需手动解决既可
————————————————
③ 使用开发工具 IDEA进行分支代码合并
四、使用技巧
提交忽略某些文件,在我们提交gitee的时候经常遇到一些需要忽略某些文件不进行上传,比如我们的依赖包
// 我这里需要设置忽略的是unpackage
unpackage= > dist 文件夹 (小程序的打包)
设置根目录写的.gitignore文件(没有的话就进行新建)
unpackage/dist/
下面是我正常忽略的文件,可以参考
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
#dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
五、问题
常见
1、代码推送
git clone url拉取代码后,git branch -a处于 master 分支,创建个人本地分支,git checkout -b username,
git pull origin master,保证个人本地分支代码与 master 分支代码相同,然后(创建远程分支,将本地个人分支代码与远程分支创建关联并推送到远程分支)
git push origin username:username 前面一个远程分支名称可以随便取的。
2、代码更改不保存就提交
代码改蹦,对本地代码中修改的部分不做保存,具体:
1、git fetch --all
2、git reset --hard origin/master,这里的 master 可以是远程个人分支的分支名
3、commit报错
当 git commit 的时候报错:husky > pre-commit (node v12.13.0) Stashing changes…
输入 git commit -m ‘xxx’ --no-verify 绕过了 lint 的检查即可
4、拉取指定分支代码
在 master 分支拉取指定远程分支代码
git fetch origin 本地分支名:远程分支名称,然后切换个人分支 git log 即可
或者处在 a 分支,想啦b分支的代码,
git checkout b
git pull origin b 即可
5、恢复代码
在 git status 时候发现有某个文件已经改动(还没有 add 和 commit ),但是现在不想改动,想还原,而且只需要还原这个文件,其他的改动继续提交
git checkout – @/aaa/bbb/xxx.vue 即恢复到修改之前的代码
6、切换镜像
淘宝镜像: npm install -g cnpm –registry=https://registry.npm.taobao.org (不建议)
7、修改用户名
git修改用户名
git config --system --unset credential.helper
git config --global credential.helper store
8、clone失败
$ git clone https://github.com/PanJiaChen/vue-element-admin.git
Cloning into ‘vue-element-admin’…
fatal: unable to access ‘https://github.com/PanJiaChen/vue-element-admin.git/’:
OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443
解决办法:将上面的 https 改为 git ,即 git://github.com…
9、autocrlf报错
warning: LF will be replaced by CRLF in —>
解决办法: git config --global core.autocrlf false
10、删除远端分支报错
git push origin --delete username 报错
删除远程分支报错 remote refs do not exist
解决办法: git fetch -p origin
11、超时设置
RPC failed; curl 28 OpenSSL SSL_read: Connection was reset, errno 10054
3981 error fatal: expected flush after ref listing
在我们的网络不稳定时候会遇到波动超时问题
方案一
可以增加 Git 的超时时间,以便在网络连接不稳定时有更多的时间来完成操作。你可以通过设置 Git 的全局配置来增加超时时间
git config --global http.lowSpeedLimit 0
git config --global http.lowSpeedTime 999999
git config --global http.keepAlive 300
git config --global http.maxRequestBuffer 100M
git config --global http.maxRequests 100
方案二
使用 SSH 协议进行 Git 操作,因为 SSH 在某些情况下比 HTTPS 更稳定
五、 实际报错
1、报错 git push rejected
git报错-git push rejected
![rejected] master->master(fetch first)
error:failed to push some refs to 'https://github.com/xxx/xxx.git'
解决方案一:
操作 git fetch,然后再次push => 依然报错
git fetch从远程仓库中获取最新代码,将其存储在本地仓库中,但不会自动合并或修改本地代码。只会将远程分支的最新状态下载到本地,以便在本地进行比较和合并。
这使得你可以查看远程分支的更新,而不会影响本地分支的代码。可以使用git merge或git rebase命令将远程分支的更改合并到本地分支上。
解决方案二:
先拉取再重新提交
hit “git pull ...” before pushing again.
// 执行git pull,然后再执行push果然就可以了。
2、 The file will have its original line endings in your working directory
该文件将在您的工作目录中有其原始的行尾
❤ The file will have its original line endings in your working directory
执行 git add *
出现警告信息:The file will have its original line endings in your working directory
原因是路径中存在 / 的符号转义问题,false就是不转换符号默认是true,相当于把路径的 / 符号进行转义,这样添加的时候就有问题
————————————————
解决办法:执行如下命令
git config --global core.autocrlf false
3、 Not a git repository (or any of the parent directories): .git
不是git存储库(或任何父目录):.git
4、❤ error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (err 1)
❤ Mac上使用git突然遇到报错:
今天使用Mac突然遇到了问题
Git遇到一个问题,如标题
git 提交报错 error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (err 1)
❤ 问题原因
1.搜罗一大堆最终指向这是http2本身的bug。
❤ 解决方式
1.(推荐)直接换掉Git的http版本
git config --global http.version HTTP/1.1
2.更改Git的http克隆为ssh,使用ssh进行提交和拉取代码
使用ssh连接Git操作指南(…更新中)
其他方式百度试了一大堆,无效。
- 更改http buffer,第一次有用
git config --global http.postBuffer 524288000
2.重新克隆,好了几天。尤其是合并大量代码之后
总结:版文问题都是硬茬啊!