前言

  • 设想这样一种情况,如果小A写了一篇文章,并在过程中为了保险保存了大量相似的文章,用来备用,以防后悔拿来用,很麻烦。
  • 有一天小A想让小B帮忙协作写文章,一天后,小B完成了改动,小A也完成了自己的改动,小A希望自己能将小A和小B的协作合并,需要找出不同,很困难。
  • git是一款版本控制软件,可以用来帮忙解决文档的历史回档问题共同协作的合并问题。

git出现原因

  • 2002年以前,世界各地的志愿者把源代码通过这个diff发给linus,linus本人通过手工方式合并代码。linus反对使用集中式版本控制系统,集中式版本控制系统速度慢而且是付费的,与linux的开源精神不符。
  • linux就这样手工方式合并了十年,linus很难继续通过手工方式合并,社区的兄弟们表达了强烈的不满,linus选择了一个商业的版本控制系统bitkeeper,后来有位linux社区的兄弟视图破解bitkeeper,于是惹怒了开发公司bitmover,收回了linux社区的免费使用权。
  • linus花了两周时间用C写了一个分布式版本控制系统,这就是GIT!git很快就成为了最流行的分布式版本控制系统。

现存的版本控制系统

集中式版本控制系统:(CVS、SVN、ClearCase、VSS)

  • 版本库是集中存放在中央服务器,干活的时候用的都是自己的电脑,所以先从中央服务器取得时候最信息的版本,干完活了,再把自己的活推送给中央服务器。一旦中央服务器出现问题,则所有人不能工作

分布式版本控制系统:(git)

  • 每个人的本地电脑都是一个完整的版本库,这样,你的工作不需要工作不需要联网,你自己电脑改了文件A,你的同事也在他的电脑上改了文件A。这时,你们俩之间只需要各自的修改推送给对方,就可以互相看到对方的修改。但很少存在两人之间的电脑上推送版本库的。分布式版本控制系统通常也有一台充当“中央服务器端”,服务器服务的作用仅仅是用来下那个方便交换

git安装

linux: Debian或Ubuntu Linux

sudo apt-get install git

windows:

https://git-scm.com/downloads


git自报家门

  • 每个机器都必须自报家门,你的名字和email地址.本地的所有git仓库都会使用这个配置,当然也可以对某个仓库制定不同的用户名和Email地址。

    1
    2
    git config --global user.name "Mike-wen"
    git config --global user.email "1781693821@qq.com"
  • 可查看当前git仓库的配置情况。

    1
    git config --list


初始化使用GIT库

1
2
3
4
mkdir test_repository 
git init 初始化一个版本的库
git add readme.txt 告诉git将文件放到仓库
git commit -m "hello "本次提交的说明"

初始化GIT库

使用GIT库

  • 首先在test_repository新建名例为readme.txt文件

  • git add readme.txt成功将readme.txt添加到缓存区
  • git commit -m 'first write',-m后面的文本是本次提交的说明
    1
    2
    1 file changed:表示一个文件改动
    2 insertions:插入了两行内容


版本控制

  • git log查看最近到最远的提交日志

  • git log --pretty=oneline查看简易的提交日志

  • git reset --hard HEAD^(回退到上一个版本,HEAD^^前两个版本以此类推,也可以写成“HEAD~次数”)

  • git log后发现最新的版本号记录消失了,可以通过输入git reset –hard ID号回退到之前最新的版本号。

  • git reflog用来记录下每一次的版本的切换

  • git reset --hard 版本号前四位便可以切换到指定版本


  • 工作区和版本库(.git)、暂存区(stage)
    1
    2
    3
    git add filename 将文件添加到stage(index)暂存区内
    git commit -m 将暂存区内的文件提交到版本库中
    git status查看当前版本较之前的改动

>

7.撤销修改

1
git checkout -- filename	丢弃工作区的修改

  1. 当暂存区没有内容时,执行该操作,会同步版本库中的内容 回到最近git commit
  2. 当初暂存区有内容呀时,执行该操作,会同步暂存区内的内容 回到最近git add
    场景1:当改乱了工作区的某个文件的内容,想直接丢弃工作区的内容git checkout -- filename


    场景2:当改乱了工作区的内容,并添加到了占存区

    1
    2
    git reset HEAD filename
    git checkout -- filename

场景3:已经提交了不适合的版本修改,回退版本
git reset --hard HEAD^



参考链接

廖雪峰的GIT教程

留言

⬆︎TOP