目录(学习记录)
一、Git初始设置
安装成功后能够在开始菜单中看见这些部件,打开Git Bash
Git使用的是Linux环境下的操作语言,下面命令是设置签名(名字和邮箱,为了能够辨别你是谁):
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
接下来创建版本库
选择一个文件夹下创建空文件夹(可以利用mkdir创建,用cd前往相应目录,以下是我创建了文件夹后进行初始化的步骤)
创建完成后通过 git init 命令把这个目录变成Git可管理的仓库
这样Git环境就差不多搭建好了。
二、Git简介
Git是分布式版本控制系统,所以,没错,还有集中式版本控制系统。
先理解下版本控制系统。
版本控制工具具有以下几个功能:
协同修改:多人一起修改服务器端的同一个文件
数据备份:能够记录修改日志和提交过的历史状态
版本管理:保存版本文件信息时不保存重复数据。Git采取了文件系统快照的方式(保存的是文件系统的快照)
权限控制:对团队中参与开发的人员进行权限控制,对团队外开发者贡献的代码进行审核(Git独有特点)
历史纪录:查看修改人、修改时间、修改内容和日志信息,还可以将本地文件恢复到某一个历史状态
分支管理:允许开发团队在工作过程中多条生产线同时推进任务。
但集中式版本控制系统版本库是集中存放在中央服务器中的,需要联网,假如服务器崩坏,那整个系统也无法运作,这也叫做单点故障。
Git大部分操作都在本地完成,,能够避免单点故障问题,有完整性保证,且分支操作非常快捷流畅。
三、Git的一些基本操作命令和实践
(1)查看或设置签名
项目级别/仓库级别:仅在当前本地库范围有效(去掉用户名和邮箱就可以查看现在的用户名和邮箱)
git config user.name 用户名
git config user.email 邮箱
系统用户界别:登录当前操作系统的用户范围,这里就不展示了
git config --global user.name 用户名
git config --global user.email 邮箱
级别优先级:项目级别>系统用户级别(不允许二者都没有)
(2)提交文件(将文件从工作区→暂存区→本地库)
以下为示意图:
命令:
git status:显示工作区、暂存区状态
git add <file>将工作区放入暂存区 git rm --cached <file> 撤销放入暂存区
git commit -m “commit message” <file>暂存区提交到本地库
(3)查看日志
git log 修改日志(会出现哈希指针,多屏显示:空格向下翻页,b向上翻页,q退出)
git log --pretty=oneline(每条日志显示一行)
git log --oneline(只出现部分哈希指针)
git reflog:在oneline基础上显示移动到当前状态的步数
(4)版本回退(也可用在撤销)
git reset --hard <哈希指针的head>:移动到某个位置(哈希指针相当于索引)
git reset --hard HEAD^ :退回上次修改的状态(一个^表示回退一步)
git reset --hard HEAD^^^=git reset --hard HEAD~3
这里对reset三个参数进行对比:
- soft:仅在本地库移动HEAD指针
- mix:在本地库移动HEAD指针,重置暂存区
- hard:在本地库移动HEAD指针,重置暂存区,重置工作区
撤销修改:
git checkout – <file>
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”
(5)删除
rm <file>:从版本库删除文件,可以找回,因为这不会删除版本,再上一个版本中还存在此文件(利用git reset --hard)
注意:先输入rm <file>再输入git rm <file>
(6)比较文件差异
git diff <file> 将工作区和暂存区的文件进行比较
git diff <某个历史版本><file> 将工作区文件和本地库历史记录比较(不带文件名就是比较多个文件)
(7)分支
git branch -v 查看分支
git branch <分支名> 创建分支
git checkout <分支名> 切换分支
git checkout -b <分支名> 创建并切换分支
git branch -D <分支名> 删除分支
git branch -m <旧分支名> <新分支名> 重命名分支
合并分支(将分支2合并到分支1上):切换到要被合并的分支(假设为分支1)上,然后使用git merge<分支名(分支2)>,此时分支2上的修改就在分支1上了。
git merge --no-ff <分支名> 是合并禁用
Fast forward
模式,避免丢掉分支信息
合并之后可以看到在hibranch上修改的内容都显示在master上。
两分支比较差异可以使用
git log <分支1> ^<分支2> 比较分支1和分支2的差别
git log <分支1>..<分支2> 比较分支1比分支2多了什么
git log --left-right <分支1>...<分支2> 比较哪个分支多了改动,指出改动和分支
(8)合并冲突
修改readme.txt中的文字,提交到本地库中
再切换回master,同时修改最后一句并提交
此时合并就发生冲突
利用git status可以查看冲突原因
此时查看readme.txt
解决冲突的方法是自己修改readme.txt文件<-捂脸->,然后提交
(9)保存现场
git stash
把当前工作现场“储藏”起来,等以后恢复现场后继续工作git stash apply <工作现场索引> 恢复工作现场内容
git stash drop <工作现场索引> 删除工作现场
git stash list
查看工作现场列表
git stash pop <工作现场索引>
恢复工作现场同时删除工作保存列表中的数据
(10)标签设置
git tag 版本号 <哈希指针的HEAD>
git tag 查看版本号
git tag -a 版本名 -m "标签说明" <哈希指针的HEAD>
git show <版本名> 可以看到标签说明
git tag -d <版本号> 删除标签
git push origin <版本号> 推送到远程仓库
git push origin --tags 推送所有标签到远程
(11) pull和fetch
git fetch origin <分支名>
git pull origin<分支名>
fetch是拉取所有本地仓库中还没有的数据(即最近一次fetch以来的更新),且只是将远程数据拉取到本地仓库,并不自动合并到当前工作分支;
而pull是自动抓取数据并合并到本地仓库中。
四、Git上传到远程仓库(这里拿Github举例)
先在Github上创建一个仓库,输入仓库名称,可以选择设置一下SSH(打开setting)
SSH可以在Git GUI里面找到,点击然后单击show SSH key,然后复制到进去就可以了。
这里开始建立连接。
输入
$ ssh -T git@github.com 这是用SSH方式连接Github
git remote add origin 地址(上图中的链接) HTTP方式或SSH方式
然后可以将本地仓库中的文件推送到github仓库中(这里先进行了拉取,再推送)
注:这里要现有自己的本地仓库即文件夹里有.git文件,没有的话要"git init"一下。
进入到自己本地的仓库中(这里采用的是放项目的文件夹),并且将远程仓库文件克隆下来,这样你可以改远程仓库里的文件。(可以直接试下Push)
打开自己本地项目文件夹,发现新增一个文件夹,是刚刚克隆的远程仓库里的文件。
下面就将本地项目上传到远程仓库中,之后查看你的Github仓库就会发现多了项目啦~