学习Git
写这篇主要是为了我做一个学习的记录,对于学习一个新的知识,我觉的还是记录一些东西对于知识点会更加清晰,故逐渐的我就保持学习一个新的知识时,我就开始做记录,也培养培养自己用文字描述一个事情的能力,话说这个过程是真的很难受,咱真真不善于表达。
Git是目前世界上最先进的分布式版本控制系统
Git真的是高端大气上档次,分支秒切,真真惊艳到咱了。
更惊讶的是,Linus大神只花了两周时间用C写的,一个月之内容,LInux系统的源码就由Git管理了!
本文主要参考廖雪峰的官方网站
集中式Vs分布式
集中式图
分布式图
创建版本库
版本库又名仓库,英文名为repository,可以简单理解成一个目录,这个目录里面的所有文件都可以被git管理,每个文件的修改、删除、Git都能跟踪,以便于任何时刻都可以追踪历史,或者还原。
创建一个版本库非常简单,首先,旋转一个合适的地方,创建一个空的目录:
mdkir test
cd test
第二部,通过git init命令把这个目录变成Git可以管理的仓库:
git init
瞬间就把仓库建好了,是一个空的仓库
然后就可以在该目录下新建文件可以管理了
使用git add命令来添加文件到仓库
git add readme.md
执行上面的命令,没有任何显示就对了,Unix的哲学是”没有消息就是好消息“,说明添加成功
第二步,用命令git commit告诉git,把文件提交到仓库。
git commit -m '描述一下'
git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,这个你就能从历史记录f方便的找到改动记录。
可以继续修改文件内容,然后使用git status命令查看结果
git status命令可以让我们时刻了解仓库当前的状态。
可以使用命令git diff查看
git diff是查看difference,显示的格式是unix通用的diff格式
git log查看历史记录
git log --pretty=oneline可以看得舒服一些
这里看到的一串类似1094adc...的是commit id(版本号)
每提交一个新版本,实际上git就会把它们串成一条时间线。
git reset --hard HEAD^回退到上一个版本
git reset --hard 1094a (commit id版本号)即可回退到指定版本
git reflog 会显示每一次的命令
版本库
撤销修改
git checkout -- file 可以丢弃工作区的修改
这里有两种情况:
- 一种是file自修改后还没有放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
- 一种是file已经添加到暂存区后,又做了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让文件回到最近一次git commit或git add的状态。
git checkout -- file命令中的--很重要,么有--就变成了"切换到另一个分支“的命令。
现在假定修改的东西,已经git add到暂存区了,庆幸的是在commit之前,你发现了这个问题,可以使用命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区
git reset HEAD test.txt然后再丢弃工作区的修改
git checkout -- test.txt即可。
远程仓库
第一步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可以直接跳到下一步。如果没有,打开shell,创建SSH Key:
ssh-keygen -t rsa -C 'youremail'
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可。
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的密钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
第二步:登录GitHub,打开“Account settings",”SSH Key"页面:
然后,点"Add SSH Key",填上任意的Title,在Key文本框黏贴id_rsa.pub文件的内容
点"Add Key",就可以了。
**添加远程仓库"
可以使用命令
git remote add origin git@github.com/xxxx.git
添加后,远程仓库的名字就是origin,这是git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程仓库。
下一步,就可以吧本地仓库的所有内容推送到远程库上:
git push -u origin master
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
由于远程库是库的,我们第一次推送master分支时,加上了-u参数,git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。而后就可以使用简化命令
git push origin master
从远程库克隆
使用命令git clone克隆一个本地库
git clone git@github.com/xxxx.git
分支管理
- 创建与合并分支
创建dev分支,然后切换到dev分支:
git checkout -b dev
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
git branch dev
git checkout dev
然后使用git branch命令查看当前分支
git branch命令会列出所有分支,当前分支前面会标一个*号。
然后,我们就可以在dev分支上正常提交.
现在,dev分支的工作完成,我们就可以切换到master分支:
git checkout master
现在,我们把dev分支的工作成果合并到master分支上:
git merge dev
git merge命令用于合并指定分支到当前分支。合并后,再查看文件内容,就可以看到,和dev分支的最新提交时完全一样的。
合并完完成后,就可以放心地删除dev分支了:
git branch -d dev
删除后,查看branch,就只剩下master分支了;
git branch
工作现场“储藏”
使用stash功能,可以把当前工作现场“储藏”起来,等以后恢复x现场后继续工作:
git stash
现在,用status查看工作区,就是干净的,因此可以放心地创建分支来修复bug。
首先确定要在哪个分支上修复bug,假定需要再master分支上修复,就从master创建临时分支:
git checkout master
git checkout -b issue-101
现在修复bug,修复完成后,切换到master分支,并完成合并,最后删除issue-101分支:
git checkout master
git merge --no-ff -m 'merged bug fix 101' issue-101
现在是时候回到dev分支干活了!
git checkout dev
git status
工作区是干净的,刚才的工作现场存到哪去了?用git stash list命令查看:
git stash list
工作现场还在,git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一个是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要使用git stash drop来删除
另一个方式是用git stash pop,恢复的同时把stash内容删除了:
git stash pop
再用git stash list查看,就看不到任何stash内容了:
git stash list
也可以多次stash,恢复的时候,先用git stash list查看,然后恢复到指定stash,用命令:
git stash apply stash@[0]

浙公网安备 33010602011771号