参考博客:git
1. 初始化一个Git仓库,使用git init命令。bootstrap
2. 添加文件到Git仓库,分两步:ssh
第一步,使用命令git add <file>,注意,可反复屡次使用,添加多个文件;ide
第二步,使用命令git commit,完成。this
3. 使用git status命令, 掌握工做区的状态。spa
4. 若是git status告诉你有文件被修改过,用git diff能够查看修改内容。指针
5. git log命令查看历史记录。orm
git log --pretty=oneline排序
6. 版本回退
git reset --hard HEAD^ // HEAD指向的版本就是当前版本。
git reset --hard commit_id
commit_id是版本号,用git log查看。即Git容许咱们在版本的历史之间穿梭前,
用git log能够查看提交历史,以便肯定要回退到哪一个版本。要重返将来,用git log
查看命令历史,以便肯定要回到将来的哪一个版本。
7. 工做区和暂存区
工做区:使用git init命令初始化的目录。
版本库:工做区有一个隐藏目录.git,这个不算工做区,而是Git的版本库。
git add命令把要提交的全部修改放到暂存区(Stage)
git commit可一次性把暂存区的全部修改提交到分支(master)
管理修改:每次修改,若是不add到暂存区,那就不会加入到commit中。
撤销修改:
1.当改乱工做区某个文件的内容后想直接丢弃工做区的修改时,用命令git checkout -- file
2.当不但改乱工做区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,
第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操做。
3.已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,
不过前提是没有推送到远程库。
删除文件:rm test.txt // 删除工做区的文件
<1> git rm test.txt // 从版本库中删除该文件
git commit -m "remove test.txt" // 提交到版本库
<2> git checkout -- test.txt // 用版本库的版本替换工做区的版本
8. 远程仓库GitHub
(1)建立SSH Key。ssh-keygen -t rsa -C "youremail@example.com",在用户主目录下,会
生成.ssh目录,这个目录下生成id_rsa和id_rsa.pub这两个文件。
(2)在GitHub上Add SSH Key。
(3)在GitHub上 Create a new repository。
(4)把本地仓库的内容推送到GitHub仓库,在本地的learngit仓库下运行命令:
git remote add origin git@github.com:scarliyang/learngit.git
错误:提示出错信息:fatal: remote origin already exists.
解决办法以下:
一、先输入$ git remote rm origin
二、再输入$ git remote add origin git@github.com:oscarliyang/gitdemo.git
(5)把本地库的全部内容推送到远程库上
git push -u origin master // 第一次推送master分支的全部内容时加上了-u参数
git push origin master // 以后提交只须要这样
(6)从远程库克隆
<1>先建立远程库:建立一个新的仓库,勾选Initialize this repository with a README,
这样GitHub会自动为咱们建立一个README.md文件
<2>再从远程库克隆:git clone git@github.com:oscarliyang/gitdemo.git
注:Git支持多种协议,默认的git://使用ssh,但也可使用https等其余协议。
9. 分支管理
在Git里,主分支即master分支。HEAD严格来讲不是指向提交,而是指向master,master才是
指向提交的,因此,HEAD指向的就是当前分支。
(1)建立与合并分支
<1>首先,咱们建立dev分支,而后切换到dev分支:
git checkout -b dev // git checkout命令加上-b参数表示建立并切换,
至关于如下两条命令: git branch dev 和 git checkout dev
<2>而后,用git branch命令查看当前分支:
git branch// git branch命令会列出全部分支,当前分支前面会标一个*号。
<3>提交:git add readme.txt
git commit -m "branch test"
<4>切换回master分支:git checkout master
<5>把dev分支的工做成果合并到master分支上:
git merge dev//用于合并指定分支到当前分支
<6>删除dev分支:git branch -d dev
(2)解决冲突
即分支和master都修改了同一个文件,致使冲突。则在提交到master分支时,先须要修改
冲突内容,再add/commit。看到分支的合并状况:
git log --graph --pretty=oneline --abbrev-commit
最后删除分支。
(3)分支管理策略
--no-ff参数,表示禁用Fast forward:git merge --no-ff -m "merge with no-ff" dev
在实际开发中,咱们应该按照几个基本原则进行分支管理:首先,master分支应该是很是
稳定的,也就是仅用来发布新版本,平时不能在上面干活;那在哪干活呢?干活都在dev分
支上,也就是说,dev分支是不稳定的,到某个时候,好比1.0版本发布时,再把dev分支合
并到master上,在master分支发布1.0版本;你和你的小伙伴们每一个人都在dev分支上干活,
每一个人都有本身的分支,时不时地往dev分支上合并就能够了。
注:合并分支时,加上--no-ff参数就能够用普通模式合并,合并后的历史有分支,能看出来曾经
作过合并,而fast forward合并就看不出来曾经作过合并。
(4)Bug分支
修复bug时,咱们会经过建立新的bug分支进行修复,而后合并,最后删除;
当手头工做没有完成时,先把工做现场git stash储藏一下,而后去修复bug,修复后,
再git stash pop,回到工做现场。
(5)Feature分支
开发一个新feature,最好新建一个分支;若是要丢弃一个没有被合并过的分支,能够经过
git branch -D <分支名>强行删除。
(6)多人协做
当从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,
而且,远程仓库的默认名称是origin。
查看远程库的信息,用git remote
查看远程库详细信息,用git remote -v
多人协做的工做模式一般是这样:
首先,能够试图用git push origin branch-name推送本身的修改;
若是推送失败,则由于远程分支比你的本地更新,须要先用git pull试图合并;
若是合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
注:若是git pull提示“no tracking information”,则说明本地分支和远程分支的连接关系没有
建立,用命令 git branch --set-upstream branch-name origin/branch-name
抓取分支:在本地建立和远程分支对应的分支(本地和远程分支的名称最好一致),使用
git checkout -b branch-name origin/branch-name
10.标签管理
发布一个版本时,咱们一般先在版本库中打一个标签,这样,就惟一肯定了打标签时刻的版本。
未来不管何时,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。因此,
标签也是版本库的一个快照。Git的标签虽然是版本库的快照,但其实它就是指向某个commit的
指针(跟分支很像对不对?可是分支能够移动,标签不能移动),因此,建立和删除标签都是
瞬间完成的。
(1)建立标签
首先,切换到须要打标签的分支上。
而后,敲命令git tag <name>就能够打一个新标签。
命令git tag查看全部标签。
默认标签是打在最新提交的commit上的,git tag v0.9 commitid 对指定commitid打标签
标签不是按时间顺序列出,而是按字母排序的。能够用git show <tagname>查看标签信息
建立带有说明的标签,用-a指定标签名,-m指定说明文字:
git tag -a v0.1 -m "version 0.1 released" 3628164
还能够经过-s用私钥签名一个标签:
git tag -s v0.2 -m "signed version 0.2 released" fec145a
(2)操做标签
删除标签:git tag -d v0.1 //建立的标签都只存储在本地,不会自动推送到远程
推送某个标签到远程:git push origin <tagname>
一次性推送所有还没有推送到远程的本地标签:git push origin --tags
删除推送到远程的标签:
git tag -d v0.9 //先从本地删除
git push origin :refs/tags/v0.9 //而后从远程删除
11.使用GitHub
参与一个开源项目:点“Fork”就在本身的帐号下克隆了一个bootstrap仓库,而后,从本身的帐号
下 clone:git clone git@github.com:michaelliao/bootstrap.git。必定要从本身的帐号下clone仓库,
这样你才能推送修改。若是从开源库的做者的仓库地址git@github.com:twbs/bootstrap.git克隆,
由于没有权限,你将不能推送修改。能够在GitHub上发起一个pull request,向开源项目的官方库
提交你的修改。即:
在GitHub上,能够任意Fork开源仓库;
本身拥有Fork后的仓库的读写权限;
能够推送pull request给官方仓库来贡献代码。