Git基础入门教程
1、Git简介
Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git是Linus Torvalds 为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。
1.1 Git的主要功能
- 文件备份
- 版本管理
- 多端共享
1.2 Git和SVN的区别
- Git是分布式的,SVN是集中式
这是Git和SVN最核心的区别。好处是跟同项目的其他开发人员不会有太多的冲突,自己写的代码放在本地,一段时间后再提交、合并,也可以不用联网在本地提交; - Git把内容按元数据方式存储而SVN是按文件存储
所有的资源控 制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。如果你把.git目录的体积大小跟.svn比较,你会发现它们差距很大。因为.git目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等。 - GIT的内容完整性要优于SVN
GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。 - 网络依赖性
Git下载下来后,在本地不必联网就可以看到所有的log,很方便学习,SVN却需要联网; - 提交流程
SVN在Commit前,我们都建议是先Update一下,跟本地的代码比对没问题,并确保开发的功能正常后再提交,如果忘记Updata就Commit,会经常发生错误,耽误开发时间,Git因为多了添加到暂存区的步骤,这种出错情况会少些。
2、各系统Git安装
2.1 linux系统安装Git
- 如果是Debian或Ubuntu可以使用下列命令完成Git的安装。
$ sudo apt-get install git
- 其他Linux版本,可以直接通过源码安装。先从Git官网https://git-scm.com/downloads下载源码,然后解压,依次输入下列命令完成Git安装。
$ ./config
$ make
$ sudo make install
2.2 Mac OS系统安装Git
- 通过homebrew https://brew.sh/ 安装
- 通过AppStore安装Xcode,Xcode集成了Git,不过默认是没有安装的,选择菜单“Xcode”>“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。
2.3 Windows系统安装Git
- 可以从Git官网直接下载安装程序,按照默认安装即可。安装完成后运行Git Bash,弹出下图窗口表示安装成功。
3、Linux常用命令
Git Bash使用的是Linux命令,下面列出了Linux的一些常用命令供大家参考。
命令 | 用途 | 备注 |
---|---|---|
rm -rf 文件夹名 | 删除文件夹 | 慎用!如果不指定文件夹将会删除当前目录下所有文件夹,而且被删除的文件不能恢复!!! |
rm 文件名 | 删除文件 | |
mkdir 文件夹名 | 新建文件夹 | |
cd 目录名 | 切换目录 | |
cd ../ | 返回上级目录 | |
ls -al | 显示当前目录所有文件 | 包括隐藏文件 |
touch 文件名 | 新建文件 | |
cat 文件名 | 查看文件 | |
mv 文件名 目标路径 | 移动文件 | |
echo 内容 > 文件名 | 创建并输入内容到指定文件 | |
echo 内容 >> 文件名 | 追加内容到指定文件 | |
vi 文件名 | 用vi编辑文件 | 插入模式:按 i 键退出编辑模式:按 esc 键强制退出:输入 :q! 保存后退出:输入 :wq |
4、Git分区
- Git分为工作区、暂存区和版本区
- 工作区:代码(文件)编辑的地方
- 暂存区:暂时缓存文件的地方,Git对比SVN来说,SVN中是没有暂存区这个概念,代码直接从工作区提交到版本区,但是这样有不好的地方。在git中,暂存区的作用是:
- 为了避免工作过程中出现的一些误操作,保护工作区和版本区(版本回退和撤销)
- 可以进行分支处理
- 版本区:本地最终代码存放的地方,从版本区中将文件提交到远程github仓库中
- 查看文件状态
$ git status
- 工作区文件为红色
- 提交到暂存区的文件为绿色
- 提交到版本区查看文件状态会显示nothing to commit, working tree clean
5、Git初始化
- 安装完成后需要设置用户名和邮箱
$ git config --global user.name "YourName" //设置用户名
$ git config --global user.email "email@example.com" //设置邮箱
如果用了 –global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。
如果要在某个特定的项目中使用其他名字或者电子邮箱,只要去掉 –global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。
- 初始化Git(创建工作区)
$ cd d:git //切换到需要初始化的目录
$ git init //初始化
- 当前目录后面出现(master)就是已经被git管理了,master是默认分支,文件夹里会新建名为.git的隐藏文件夹
- 如果要取消当前文件夹被Git管理,删除当前目录下的.git文件夹即可,删除命令(慎用!如果不指定文件夹将会删除当前目录下所有文件夹,而且被删除的文件不能恢复!!!):
$ rm -rf .git
- 不要在文件夹里初始化,然后再进子文件夹初始化,因为项目不能嵌套项目。
6、提交文件
$ git add 'File Name' //将工作区文件提交到暂存区
$ git add . //将工作区全部文件提交到暂存区
$ git rm --cached 'File Name' //删除暂存区文件
$ git rm --cached . -r //递归删除暂存区
$ git commit -m 'Version Description' //提交到版本区
$ git commit -am 'Version Description' //从工作区直接提交到暂存区和版本区,文件需要提交到暂存区一次
$ git log //查看日志
7、文件比较与版本切换
7.1 文件比较
$ git diff //比较工作区和暂存区
$ git diff head //比较工作区和版本区
$ git diff --cached //比较暂存区和版本区
7.2 版本切换
$ git checkout . //从暂存区将工作区全部覆盖
$ git checkout 'File Name' //从暂存区将工作区指定文件覆盖
$ git reset HEAD //从版本区拉取上一版本到暂存区
$ git reset --hard 'Version ID' //版本区变更到指定版本
$ git reset HEAD^ //版本区返回到上一版本,有几个^就代表返回上几个版本
$ git reflog //查看所有版本区版本
$ git log --oneline //查看版本区日志(单行显示)
$ git log --graph //查看版本区日志(图形化显示)
8、分支
- 要先提交一次创建主分支,HEAD指针默认指向master分支,每次提交到版本区就被视作为一个节点,在主分支的基础上添加一个分支,在分支上进行提交,最后切换到主分支来合并分支。
- 如果分支文件没有冲突Git可以自动合并,如果有冲突需要手动删除不想要的保留想要的代码,手动解决完成后再进行commit操作。
$ git branch //查看本地分支
$ git branch -r //查看所有远程分支
$ git branch -a //查看所有本地和远程分支
$ git branch 'Branch Name' //创建分支
$ git checkout 'Branch Name' //切换分支,切换HEAD指针指向
$ git checkout -b 'Branch Name'//创建并切换分支
$ git branch -d 'Branch Name' //删除分支,有修改但未合并的分支不能删除
$ git branch -D 'Branch Name' //强制删除分支,删除分支不能在当前分支里面
$ git merge 'Branch Name' //合并分支
- 我们有时会遇到这样的情况,正在dev分支开发新功能,做到一半时有人过来反馈一个bug,让马上解决,但是新功能做到了一半你又不想提交,这时就可以使用git stash命令先把当前进度保存起来,然后切换到另一个分支去修改bug,修改完提交后,再切回dev分支,使用git stash pop来恢复之前的进度继续开发新功能。
$ git stash //存储最新进度文件,暂存区文件覆盖到工作区
$ git stash save 'Stash Description' //存储文件附加说明
$ git stash list //进度文件列表
$ git stash pop //还原最新的进度文件到工作区,并将储存的进度删除
$ git stash pop --index //恢复进度到工作区,在储存进度之前工作区提交过暂存区,也将暂存区恢复
$ git stash pop 'StashID' //恢复指定的进度到工作区,StashID可以用过git stash list查询
$ git stash apply //除了不会删除储存的进度,其他与git stash pop命令相同
$ git stash apply --index //除了不会删除储存的进度,其他与git stash pop --index命令相同
$ git stash apply 'StashID' //除了不会删除储存的进度,其他与git stash pop命令相同
$ git stash drop 'StashID' //删除一个储存的进度。如果不指定ID,则默认删除最新的存储进度
$ git stash clear //删除所有储存的进度
9、GitHub
9.1 注册登录
- 访问GitHub主页,输入用户名、邮箱、密码进行登录
- 没有账号可以按步骤进行注册
9.2 远程仓库
- 创建仓库
- 关联远程仓库
- 创建一个新项目
$ makedir test
- 创建README.md
$ echo "# test" >> README.md
- 创建.gitignore文件,如果有不想提交的文件就写在里面
$ echo "不想提交的文件名" >> .gitignore
- 初始化
$ git init
- 提交项目
$ git add .
$ git commit -m "first commit"
- git不会上传空文件夹,在空文件夹内创建.gitkeep可以上传此空文件夹
- 关联远程仓库,别名:origin
$ git remote add origin https://github.com/SainHe/test.git
- 将master分支推送到远程仓库,第一次写上-u会记录别名和分支名,以后再用一样的参数就可以不用加任何参数使用git push了
$ git push -u origin master
- 拉取远程仓库代码至本地
$ git pull origin master
- 查看所有远程关联仓库
$ git remote -v
- 删除远程关联仓库
$ git remote rm origin
9.3 发布静态页
- 在项目中创建一个gh-pages的分支
$ git checkout -b gh-pages
$ touch index.html
$ echo content > index.html
- 再将gh-pages分支提交到远程仓库
$ git add .
$ git commit -m "message"
$ git push origin gh-pages
- 在settings找到github-pages找到生成的网址
9.4 项目拉取到本地
- 查找要拉取的项目仓库
- 复制远程仓库地址
- 拉取到本地
$ git clone '远程仓库地址' origin
- 拉取到本地的文件夹默认就是git仓库而且有origin地址,可以将代码提交到自己的GitHub
9.5 更改别人代码
- Fork是在当前项目下克隆一份,如果代码更新,不会随之更新
- 进入自己Fork的仓库,点击New pull request将代码请求提交给原作者
- 只有Fork关系才能发送pull request请求
- Pull requests查看别人提交的更改请求
9.6 添加贡献者
- setting——Collaborators——输入要邀请合作的人点击add collaborator添加贡献者,被添加的人拥有最大权限
9.7 问题留言
- 点击Issues,可以就项目的问题给开发者留言