本文前半部分面向零基础小白,讲解一些git的安装和原理性的东西,将使用命令集合在“总结”处,前来查阅命令的博友可以直接跳转。
文章目录
git安装及配置
Windows:
下载安装包安装,一路next即可。注意选择64/32位(如下图为适用64位的安装包)
下载完毕以后在任意的文件夹窗口空白处右击可以看到 Git Bash Here 和 Git GUI Here 两个选项。
下面配置一下git:选择上述选项中的Git Bash Here
git --version #查看版本
git config --global user.name 你的id #配置用户ID
git config --global user.email 你的email #配置用户邮箱
如上配置,其中--global
是全局配置,若不加这个属性,只在当前路径下起作用
Windows下配置完毕,输入exit
回车即可退出这个界面
Linux:
apt-get install git
或
yum install git
配置git的方法同上:
git --version #查看版本
git config --global user.name 你的id #配置用户ID
git config --global user.email 你的email #配置用户邮箱
使用git
工作区和版本库
简单介绍一下git本地(工作区,版本库)和服务器交互的过程:
假设某次项目中,我们在本地写的代码、文件都存放在xx文件夹(目录)中,那么这个文件夹就是我们的工作区。
工作区下我们将创建一个隐藏文件夹.git,这个文件夹称作版本库。当然这个版本库也只是存在本地,以git的方式记录一些数据。
每次 提交/推 都会检测当前工作区和git上的差异,然后记录这个差异部分。
文件从本地推到云端
工作区----add----》暂存区—commit—》版本库—push—》服务器
先将内容添加到本地暂存区中,但不直接写入版本库。
因为每次提交到版本库都是当前项目的一个版本,是回退节点,所以一般写到某个节点或者发生了比较大的修改才会提交记录一个版本。
再提交命令才会将暂存区中新增的内容写入到本地版本库,最后推到云端。(具体命令见下文)
建立版本库
在工作区下右键-》git bash here(linux下直接进入目录,输入下列命令即可),输入命令:
git init
将在工作区内创建一个隐藏的目录,即版本库:
提交更改到版本库
使用下列命令查看当前工作区的文件情况。即有哪些文件是还未添加到暂存区的,哪些文件是还未提交到版本库的。
git status
如下:由于刚刚创建,当前版本库内没有内容,而我们的工作区里有一个menu.html文件,使用上述命令查看git状态,如下显示untracked files有menu.html:
使用如下命令将文件添加到版本库:
git add 文件名 #添加单个文件
git add . #添加所有文件
再次查看git状态,显示还未提交的文件有menu.html:
使用如下命令将暂存区的改动提交到版本库:
git commit -m "本次提交的版本说明/注释"
再次查看git状态,显示没有可用的更新√
如果写错了最近一次commit的提示,可以使用以下命令:
git commit --amend
按i
进入编辑模式,修改第一行内容即可。修改完毕以后Esc
退出编辑模式,输入:wq
回车保存退出
本地提交到暂存区小结
git add #将工作区的改动添加入暂存区
git commit -m "本次版本记录/说明/注释" #将工作区的内容提交到版本库
git status #查看当前git状态,对比当前工作区、版本库的区别
服务器配置
云端存储可以选择自己选购的服务器,或者github, gitee这一类代码托管平台。下面演示github上创建仓库和本地项目推到云端
由于github服务器在国外,目前使用体验比较差,博主这里加载非常慢,推荐使用国内的gitee(gitee的创建连接方式跟github完全相同,而且界面是中文的对新手也比较友好)
github/gitee创建仓库及推送到云端
-
创建github账号
-
新建仓库
Repository
这一步需要填写仓库名,整一个符合项目的仓库名。以后push到云端就靠这个仓库名来识别云端存储位置
还有一点,如果勾选了添加readme文件的话,本地库中需要有一个readme.md
-
绑定仓库
git remote add 仓库名 仓库链接
-
链接云端分支
进入需要推到云端的工作区,然后执行以下git push -u 仓库名 分支名
需要输入云端仓库的用户名密码以验证。即刚刚注册的账户密码。
如果遇到无法推送的情况,可以使用-f参数强制推送。但这个参数谨慎使用,因为它会直接覆盖云端的仓库内容!!
git push -uf 仓库名 分支名
这个-u参数是建立本地工作区和仓库分支的链接。二次使用的时候就不用加了。
顺带一提,
push
使用的时候可能需要输入git的账号和密码。这个时候如果输错了可以使用Ctrl+Backspace
来删除。
版本回退
使用如下命令查看每次提交的版本情况:
git log #查看当前项目版本的更新日志
git log fileName #查看某文件日志
git log . #查看本目录日志
其中每一条记录都有一个commit
,这里显示的是版本id。
可以看到,时间最早的更新显示在最下方。也可以添加--pretty=oneline
参数让信息看起来更简洁一些:
回退命令:
git reset --hard HEAD^ #回退到上一版本
git reset --hard HEAD^^ #回退到当前版本的上两个版本
git reset --hard HEAD~20 #回退到当前版本的前20个版本
git reset --hard 版本id #回退到指定版本id的版本
其中版本id不用全写,写几个字母能区分到底是哪一个版本即可。
上述命令回退更改的是当前工作区的文件,回退到哪个版本当前工作区文件就会更改为哪个版本的文件信息
git reflog #查看所有操作日志
这个命令和log
不同之处在于,reflog
查看的是项目从建立至今所有版本级别的操作历史,包括回退操作。但log
只会显示到当前所处版本的提交情况:
如上图,已经回退到第二个版本以后,第三个版本信息用git log
就看不到了。
分支管理
分支的作用:
正在修缮准备发布下一个版本的文件a发现了bug,需要更改这个bug。但当前文件a已经被修改过,而且还有一部分更新工作尚未完成,无法直接在当前状态下修改,也无法回退到上一个未修改过的版本。
分支的解决方法是:在制作修改a文件之前,先创建一个分支addFunction
,仅在addFunction
分支上对a进行修改。
当a发现bug的时候,就可以从master
中新建一个分支dev
,在dev
分支里解决a的bug以后将dev
推回master
分支。完全不影响到addFunction
那边新功能的开发。
同样,addFunction
分支结束开发以后推回master
就可以完成新功能的添加了。
使用分支
git branch #查看目前有几个分支
git branch 分支名 #新建分支
git checkout 分支名 #转到指定分支
git checkout -b 分支名 #创建并转到指定分支
前面带星号的是当前所在分支。windows下会用不同的颜色以示区分
git merge 分支名 #将指定分支合并到master中去
git branch -d 分支名 #删除分支
不需要上传的部分
项目中可能存在某些很大但不需要上传的目录/文件(比如laravel的vendor
,写入配置文件以后,本地composer install
一下就可以安装这个目录)就可以使用.gitignore
文件来记录
具体写法这篇博客写得很详细这里就不赘述了
总结
文件从本地推送到云端的过程:
工作区----add----》暂存区—commit—》版本库—push—》服务器
命令:
git remote add 仓库名 仓库链接
git add . #更改添加到暂存区
git commit -m "本次版本说明" #提交一个版本到版本库
git push #推送到云端
git status #对比查看当前工作区和版本库之间差异
git log #查看当前版本提交日志
git log fileName #查看名为fileName文件的日志
git log . #查看当前目录的日志
git reset --hard HEAD^ #工作区回退到上一个版本
git reset --hard HEAD^^ #工作区回退到当前版本的上两个版本
git reset --hard HEAD~20 #工作区回退到当前版本的前20个版本
git reset --hard 版本id #回退到指定id的版本
git reflog #查看迄今为止所有版本变动
git branch #查看目前有几个分支
git branch 分支名 #新建分支
git checkout 分支名 #转到指定分支
git checkout -b 分支名 #创建并转到指定分支
git merge 分支名a #将指定分支a合并到当前分支中去
git branch -d 分支名 #删除分支