1.Git的工作流程
Git的工作区域有4个,分别是:远程仓库、本地仓库、工作区、暂存区
- 基本操作如图
2.Git的基本概念
- Repository(仓库):存放我们项目代码的地方,每个项目对应一个仓库。
- Star(收藏)
- Fork(复制项目):将项目复制到自己的GitHub上。如果修改了其中的代码,可以向原作者提交,如果原作者同意了我们的提交,则完成了对项目的贡献。
- Pull Request(发起提交请求)
打个比方:当你想向原作者提交自己的修改时,要走一个流程:
- 先fork别人的仓库,将代码复制到自己的仓库中。
- clone到本地分支,做一些bug fix。
- 发起pull request给原仓库,让他看到你修改的bug。
- 原仓库review这个bug,如果是正确的话,就会merge到他自己的项目中。
- Watch(关注):当关注的项目发生版本变化时会接收到通知。
- Issue(讨论):发起问题讨论。
3.Git常用命令
- git status:查看Git工作区的状态
- git diff < filename >:查看更改的内容
- git add < filename >:将文件放入缓存区中
- git commit -m '注释' < filename >:将文件提交到本地仓库
- git push:将本地仓库的文件推送到远程仓库
- git pull:将远程仓库的更新拉取到本地仓库
- git log:查看提交(git commit)的日志
- git reflog:查看所有的操作日志
- git reset --hard < commit id >:回退到指定的commit版本下(commit id在log中查看)
- git checkout --< filename >:撤销未提交到缓存区的修改
- git reset HEAD --< filename >:撤销已提交到缓存区的修改
4.Git分支命令操作
在开发新的任务迭代的时候,我们先从现在的项目代码完全一样地拷贝一份到一个新的分支上,我们就暂时命名为1分支。
突然产品经理来找我们改需求,我们先将1分支进行提交(注意此时主分支也就是项目原来的代码并没有变化,变化的内容只是在1分支下)。
然后在切回原来项目的分支(主分支)下再创建一个和主分支一模一样的分支,这里我们暂时命名为2分支,这样就可以在2分支下进行新需求的开发,并且可以同时开发1分支。
- git branch:查看当前仓库所在的分支,master是创建仓库后的默认分支。<-r>查看远程分支。
- git branch < branch name >:进行分支的创建
- git checkout < branch name >:进行分支的切换
- git checkout -b <本地分支名> <origin/远程分支名>:采用此种方法建立的本地分支会和远程分支建立映射关系。
- git push origin < branch name >:提交分支下的内容到远程仓库
- git pull origin < branch name >:将远程仓库分支的内容更新到本地仓库分支
- git merge < branch name >:将< branch name >的分支内容合并到当前分支上
5.git配置用户信息
- git config (--global) user.email "邮箱":配置提交者邮箱,无global表示当前仓库,有global表示全局
- git config (--global) user.name "用户名":配置提交者用户名,无global表示当前仓库,有global表示全局
6.git本地仓库和远程仓库的关联
- 初始化一个本地Git仓库(把本地的文件夹初始化成一个Git可以管理的版本库)
git init
- 关联一个远程仓库
git remote add origin https://github.com/<username>/<reponame>.git
- 第一次推送到远程仓库,使用-u选项
下面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。 不带任何参数的git push,默认只推送当前分支,这叫做simple方式。
git push -u origin master
7.git如何避免”warning: LF will be replaced by CRLF“提示
CRLF, LF 是用来表示文本换行的方式。CR(Carriage Return) 代表回车,对应字符 '\r';LF(Line Feed) 代表换行,对应字符 '\n'。由于历史原因,不同的操作系统文本使用的换行符各不相同。主流的操作系统一般使用CRLF或者LF作为其文本的换行符。其中,Windows 系统使用的是 CRLF, Unix系统(包括Linux, MacOS近些年的版本) 使用的是LF。
解决方法:
设置该仓库为core.autocrlf=false,即WINDOWS下也使用LF换行。若使用--global参数则全局生效,不建议使用。
git config <--global> core.autocrlf false
8.GitHub不允许上传大于100M文件的问题解决
在git-lfs官网里写的很清楚,需要下载一个大文件支持命令行。
9.Git版本回退
git reset [--hard] HEAD^
- HEAD参数怎么用
HEAD 最近一个提交 HEAD^^ 上一次的上一次的提交(倒数第三次)
HEAD^^^ 倒数第四次的提交
HEAD~0 最近一个提交
HEAD~1 上一次提交
HEAD^2 上一次的上一次的提交(倒数第三次)
HEAD^3 倒数第四次的提交
- 其它选项的含义
--mixed:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作。这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
--soft:不删除工作空间改动代码,撤销commit,不撤销git add .
--hard:删除工作空间改动代码,撤销commit,撤销git add .,注意完成这个操作后,就恢复到了上一次的commit状态,注意数据丢失。
10.Git设置代理
这是在已有SSR/SS科学上网的前提下,利用SSR的sock5接口让Git通过SSR连接远程仓库。 其中的127.0.0.1:1080是SSR的SOCK5协议默认端口。
git config –global http.proxy ‘socks5://127.0.0.1:1080’
git config –global https.proxy ‘socks5://127.0.0.1:1080’
11.error: RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errfno 10054解决方法
git pull/clone/push的时候出现如下错误
error: RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errfno 10054
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: unpack-objects faile
这是由于同步的数据过大导致的,可以修改当前仓库的配置文件./.git/config,加入[http]标签下的内容增大通信缓存区大小。
git config http.postBuffer 524288000配置。