Git学习笔记

Git简介

  • Git是分布式版本控制系统。

Git的诞生

很多人都知道,Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢?事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!你也许会想,为什么Linus不把Linux代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统吗?因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比CVS、SVN好用,但那是付费的,和Linux的开源精神不符。

不过,到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。

安定团结的大好局面在2005年就被打破了,原因是开发Samba的Andrew试图破解BitKeeper的协议,被BitMover公司发现了,于是BitMover公司怒了,要收回Linux社区的免费使用权。

Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了。历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。
# 集中式VS分布式管理系统
- 什么是集中式
版本库是集中存放在中央服务器的,修改文件先从服务器获取,完成修改后推送服务器
- 什么是分布式
分布式的每个电脑都是一个完整的版本库
- 优点
和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,Git的优势不单是不必联网这么简单,后面我们还会看到Git极其强大的分支管理,把SVN等远远抛在了后面

创建版本库

什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
创建步骤:
- 创建文件夹
- 进入文件夹,git init
- 使用命令 git add
- 提交 git commit - m “describtion”
- git status命令可以让我们时刻掌握仓库当前的状态,
- git diff顾名思义就是查看difference,显示的格式正是Unix通用的diff格式

版本回退

  • 在Git中,我们用git log命令查看修改的李璐
  • git log –pretty=oneline 可以屏蔽掉日期和修改人。(你看到的一大串类似3628164…882e1e0的是commit id(版本号)
  • git reset –hard HEAD~1 (回退到上一版本,如果是2回退上上一版本)
  • git reset –hard 3628164 (回退到某一版本号)
  • Git提供了一个命令git reflog用来记录你的每一次命令
    # 工作区和暂存区
  • 第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
  • 第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
    # 添加远程仓库
  • 首先,登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库
  • 在Repository name填入learngit,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库,不要initmd文件,不然后面推送不上去(在GitHub上的这个learngit仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。)
$ git remote add origin git@github.com:you Git/learngit.git
  • 把本地库的所有内容推送到远程库上,用git push命令,实际上是把当前分支master推送到远程
$ git push -u origin master
Counting objects: 19, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (19/19), done.
Writing objects: 100% (19/19), 13.73 KiB, done.
Total 23 (delta 6), reused 0 (delta 0)
To git@github.com:michaelliao/learngit.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令

  • 从现在起,只要本地作了提交,就可以通过命令:
$ git push origin master

# 从远程库克隆
- 登陆GitHub,创建一个新的仓库,名字叫gitskills
- 远程库已经准备好了,下一步是用命令git clone克隆一个本地库

$ git clone git@github.com:michaelliao/gitskills.git
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.

# 分支管理
- 首先,我们创建dev分支,然后切换到dev分支:(git checkout命令加上-b参数表示创建并切换,相当于以下两条命令)

$ git checkout -b dev
Switched to a new branch 'dev'

sh
$ git branch dev
$ git checkout dev

- 然后,用git branch命令查看当前分支:(git branch命令会列出所有分支,当前分支前面会标一个*号。)
- 当dev分支的工作完成,我们就可以切换回master分支:
sh
$ git checkout master
Switched to branch 'master'

- 我们把dev分支的工作成果合并到master分支上:(git merge命令用于合并指定分支到当前分支。合并后)
sh
$ git merge dev
Updating d17efd8..fec145a
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)

sh
$ git branch -d dev
Deleted branch dev (was fec145a).

- 小结
“`sh
查看分支:git branch

创建分支:git branch

切换分支:git checkout

创建+切换分支:git checkout -b

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

删除分支:git branch -d
“`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值