全部的版本控制系统,其实只能跟踪文本文件的改动,好比TXT文件,网页,全部的程序代码等等,Git也不例外。版本控制系统能够告诉你每次的改动,好比在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但无法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改为了120KB,但到底改了啥,版本控制系统不知道,也无法知道。php
工做区就是电脑中实际能看到的文件夹,好比labshare
文件夹
图片中显示有个.git
隐藏目录,它是Git的版本库。git
Git的版本库里存了不少东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为咱们自动建立的第一个分支
master
,以及指向master
的一个指针叫HEAD
ssh
每次进行git add
操做时,将文件放入stage
暂存,git commit
后将文件放入当前分支url
1.初始化一个Git仓库,使用git init
命令。
2.添加文件到Git仓库,分两步:spa
git add
,注意,可反复屡次使用,添加多个文件;git commit -m "注释"
。git status
命令可让咱们时刻掌握仓库当前的状态。命令行
git diff
进行查看相比较上个状态进行了哪些更改,如:版本控制
git diff hello.php
git log
进行查看git日志,若是一次显示太多,可选参数为--pretty=oneline
如使用git log
命令后,有多块记录,每块有四行指针
commint:123jkh123jkh12kjne12j3 //一串数字 author:XXX Date:XXXX-XX-XX XXXX //这行为git commit -m "XXXX"
--graph显示分支合并图
--abbrev-commit
日志
git rm
进行文件删除,而后git commit -m "XXX"
,若是rm
误删工做区文件,还没进行commit
可以使用git checkou --filename
从版本库中恢复出来code
git clone url
进行从远程库克隆,可选择https
和ssh
,ssh
速度优于https
如去切换至其余分区或进行其余工做,git stash
用于将手头工做暂时保存,git stash pop
回到工做现场
HEAD
表示当前版本,上一个版本是HEAD^,多个版本以前可以使用HEAD^n
(n为数字)
具体命令为:git reset --hard HEAD^
,去上一个版本
若是后悔了想回将来,前提命令行窗口未关闭,可git log
查看commit后的一串,写前几位就行能进行惟一表示,如
git reset --hard absd11
更糟糕的状况是你进行版本回退后次日又想重返将来,git log
查询不到须要版本的coomit了,这时请使用git reflog
,样子多是这样的
as12312 HEAD@{0}: commit : XXXXX asdvcad HEAD@{1}: commit : XXXXX a1deff1 HEAD@{2}: commit : XXXXX
最开始的数字就能够进行 git reset --hard as12312
,进行穿梭
1.当你改乱了工做区某个文件的内容,想直接丢弃工做区的修改时,用命令git checkout --filename
2.当你不但改乱了工做区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD filename
,暂存区的修改回退到工做区,工做区的丢弃可按照1
3.若是提交不适内容至版本库,请进行版本回退
git checkout -b name
,建立并切换到指定分区,至关于结合命令
git branch name //建立分支 git checkout name //切换分支
使用git branch
查看当前分区,当前分区前有*
标识git merge name
用于合并指定分支到当前分支git branch -d name
删除分支
分支合并时产生冲突应解决冲突再提交去工做区文件查看,标识为<<<<<<<
,=======
,>>>>>>>
标记出不一样分支的内容将冲突修复后再提交
git通常使用fast forward
模式进行分支合并,很差的地方是删除分支后悔丢掉分支信息,因此模式可调为--no-ff
禁用fast forward,在合并时会生成一个新的commit,所以可加描述进去
git merge --no-ff -m "no ff" dev //将dev分支合并至当前分支
在实际开发中,咱们应该按照几个基本原则进行分支管理:
首先,master
分支应该是很是稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,好比1.0版本发布时,再把dev
分支合并到master
上,在master
分支发布1.0版本;
你和你的小伙伴们每一个人都在dev
分支上干活,每一个人都有本身的分支,时不时地往dev
分支上合并就能够了。
因此,团队合做的分支看起来就像这样:master
是主分支,需时刻与远程同步dev
全部团队开发工做在上面,时刻与远程同步
抓取分支
1.git clone url
,克隆远程库,这时只能看到master分支
2.建立远程的dev
到本地
git checkout -b dev origin/dev
基本流程
1.首先,能够试图用git push origin branch-name推送本身的修改; 2.若是推送失败,则由于远程分支比你的本地更新,须要先用git pull试图合并; 3.若是合并有冲突,则解决冲突,并在本地提交; 4。没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功! 5.若是git pull提示“no tracking information”,则说明本地分支和远程分支的连接 关系没有建立,用命令git branch --set-upstream branch- name-origin/branch-name。
这里不少流程和思想参考廖雪峰的Git教程,不胜感激前人无私分享。
地址:Git教程--廖雪峰