1

所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。

工作区和版本库

工作区就是电脑中实际能看到的文件夹,比如labshare文件夹
labshare文件夹
图片中显示有个.git隐藏目录,它是Git的版本库。

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

聊雪峰的git教程中的图片
每次进行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进行从远程库克隆,可选择httpssshssh速度优于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教程--廖雪峰


em0t
758 声望23 粉丝

Talk is cheap, show me the code