所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。
工作区和版本库
工作区就是电脑中实际能看到的文件夹,比如labshare
文件夹
图片中显示有个.git
隐藏目录,它是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支
master
,以及指向master
的一个指针叫HEAD
每次进行git add
操作时,将文件放入stage
暂存,git commit
后将文件放入当前分支
初始化版本库
1.初始化一个Git仓库,使用git init
命令。
2.添加文件到Git仓库,分两步:
- 使用命令
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
从版本库中恢复出来
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教程--廖雪峰
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。