git

139 阅读6分钟

git是一种版本管理工具,可以备份文件,记录历史(就算彻底删除也可以在历史中找到),多端共享

版本管理工具历史:

  1. CVS 1985(始祖) 集中式管理,只要联系到中心服务器,就可以使用和保存,但是没有网络的话  ,无法工作
  2. SVN 2000(集大成者),在集中式管理的基础上,采取分支管理系统,可以多人开发一个项目来达到共用资源的目的
  3. git 2005 分布式版本控制系统
  4. github 2008 托管平台,只支持git

集中式管理系统:

优点:

  1. 管理方便,逻辑明确,符合一般人思维习惯
  2. 易于管理,集中式服务器更能保证安全性
  3. 代码一致性非常高
  4. 适合开发人数不多的项目开发

缺点:

  1. 确立服务器开发者几乎无法工作
  2. 必须要联网才能工作,而且对网络的依赖性较强,如果推送的文件比较大而且网络状况欠佳,提交文件的速度会受到很大的限制

分布式版本控制系统:

用户之间也可以进行文件传递

优点:

  1. 公共服务器压力和数据量都不会太大

  2. 速度快、灵活

  3. 任意两个开发者之间可以很容易的解决冲突

  4. 离线工作

缺点:

  1. 资料少
  2. 学习周期相对而言比较长
  3. 不符合常规思维

对比:

git的操作和使用

安装好git之后,需要自报家门

git config --global user.name "username"

git config --global user.email "useremail"

进入需要进行管理的文件夹

使用 git init 命令,文件夹下面就会多出来一个 .git 文件夹,说明该文件夹已经被git所管理

创建版本库

touch index.html 新建一个html文件

git add index.html 添加文件到临时仓库中,可以通过git status查看仓库内容

git commit -m "第一次提交文件" ,提交文件,“”里可以添加任何备注信息

版本回退,修改的暂存区里的内容

修改index.html之后查看仓库内容(git status

显示发生了修改,但是是红色(还在工作区),说明还没有添加到临时仓库中,需要再add一下(git add index.html),没有提交就不是一个新版本

新建一个a.html文件(touch a.html

查看仓库状态(git status):

显示临时仓库内index.html已经被修改,a.html还没有被添加进仓库里

git add a.html 

 git commit -m "第二次提交,修改了index.html,新增了a.html"

git log 查看版本信息

commit对应当前的版本id,head执行master分支,也就是提交的仓库。

可以通过commit ID或head指针,恢复到之前的状态

git reset --hard HEAD^ 回退到上一个版本,也就是回到第一次提交的时候(几个^就是回退几个版本)

git reset --hard 261aa44 ,如果对修改反悔了,也是可以回退到对应的版本的,只要通过id值就返回任意版本

git refolg 查看所有操作,不用担心找不到id

工作区和暂存区

工作区就是未经提交的区间,通过status查看时,工作区的文件显示的红色的

暂存区是指临时仓库的区间,工作区的文件add到临时仓库中,就到了暂存区

master仓库(head指向):通过commit命令从暂存区提交到master,提交了之后,暂存区就不会有该文件了,提交上来的文件都会被存储为一个新版本的文件,可以通过版本id值任意回溯调取使用

git diff 查看工作区和暂存区的区别

git diff --cached 查看暂存区和master区域的区别

git checkout 工作区修改了内容,但没添加进暂存区,checkout会将工作区修改的内容清空,恢复成没修改时的样子;还有一种情况是,使用了reset命令,暂存区的版本回退,和工作区的内容不一致,通过checkout可以将工作区的内容和暂存区的内容保持一致,清除掉多出来的内容

远程仓库

可以在github上创建一个git仓库,和本地的git仓库进行远程同步。资源github上的仓库既可以作为备份,也可以多人协作。

秘钥设定

打开github,登录后,点击用户头像->setting->SSH and GPG keys,在key中填入电脑上.ssh文件下,id_rsa.pub文件的内容

然后电脑上没有.ssh文件夹,输入ssh-keygen -t rsa -C "your_email@example.com"名,就可以生成一个ssh文件夹

创建仓库

在+按钮那新建一个仓库,命名之后进入这个界面

拿到后面的链接

git remote add origin git@github.com:holly-huang/gitDemo.git 通过这行命令与远程仓库进行连接

git push -u origin master 推送文件,第一次推送把-u加上

刷新页面就可以看到上传的结果

要是想要修改内容,再 git push origin master更新文件即可

分支管理

当你想要开发一个新功能,而工作量又很大,不能在短时间内完成。如果直接在master分支上备份正在做的功能,可能会影响到别人的工作。但是等功能完成之后再上传,这个过程中有可能会面临文件丢失的风险。

所以就需要分支管理,在自己的分支上完成修改等一系列操作,也不会影响到别人,等最后完成之后再一次性提交到master分支上

完整过程如下:

master分支是一条线,记录版本迭代的过程,git用master指向最新的提交操作,然后再用head指向master。

每次提交,master都会向前移动一步,随着你不断提交,master分支也越来越长。、

创建新分支,git新建一个指针dev,指向相同的提交,再把head指向dev

对工作区的修改和提交对dev分支,新提交一次后,dev指向向前移动一步,而master指针不变

dev工作完成后,合并到master上,直接把master指向dev的当前提交,就完成了合并

合并完成后,删除dev分支就只剩master一条分支

相关命令

git branch 查看分支

git branch 创建分支,创建了并不意味已经在分支上了

git checkout 切换分支

git checkout -b 创建+切换分支

git merge 合并某分支到当前分支

git branch -d 删除分支

git log --graph 查看分支合并图

多人协作

git remote -v 查看远程仓库的信息

连接到远程仓库之后,可以上传不同分支的文件

多人协作时,也是使用某一分支提供的SSH链接 git.clone git@github.com...(注意是clone而不是add),然后就可以看到多出来的仓库中的文件

如果你使用的仓库文件是旧的版本,就会存在冲突,不能上传,那么就要使用git pull获得仓库最新的文件(从远程抓取分支)

要使用分支的话,还要和远程的分支相关联 git branch --set-upstream-to=origin/<branch_name> dev,然后同样需要获取最新的文件git pull