Git版本控制

版本控制工具应该具备的功能 


    协同修改

        多人协同合作修改同一个文件。

    数据备份

        保存目录和文件的当前状态,而且保存每一个提交过得状态。

    版本管理

        版本更新时做到不保存重复数据以节约存储空间,提高运行效率。

            SVN:增量式管理。每次只保存修改的部分。调用的时候与之前的拼接起来。

            Git:文件系统快照。

    权限控制

            对团队开发人员进行权限控制。

            对团队外开发者提交的代码进行审核----Git独有操作。SVN无法接受未授权的人提交的代码。这个特点适用于开源社区管理代码。

    历史记录

        查看修改人、修改日期、修改内容、日志信息。

        将本地文件恢复到某一个历史记录。

    分支管理

        允许团队多条生产线同时推进,类似于开一个副本文件进行开发,进一步提高开发效率。


版本控制简介 


    版本控制

        使用版本控制的思想管理代码的版本迭代。

    版本控制工具比较

        集中式版本控制工具:

            CVS、SVN、VSS......

            每一个开发人员是客户端,文件和版本信息存储于服务器。

            缺点:服务器损坏,历史信息会丢失,当前开发人员只有当前文件和版本信息。会产生单点故障的问题。

        分布式版本控制工具:

            Git为例:

                本地可以进行完整的版本控制,本地有完整的历史版本信息。没有单点故障的问题。

                Git 优势 -- 第三

                    由本地的版本库,大部分操作在本地完成,不需要联网即可完成版本控制。

                    完整性保证,不同的版本有不同的哈希值保存。

                    版本库中会尽可能添加数据而不是删除或修改数据。

                    分支操作快捷流畅。分支是对不同快照的不同指针,所以很便捷。


Git 安装过程 


    安装在非中文目录下,多数步骤使用默认。

    调整 path 环境变量的三个选项,建议选择 use Git from Git Bash only。完全不修改 path 环境变量,仅在 Git Bash 中使用 Git。

    library 本地库和远程库的连接方式,使用默认值。

    行末换行符转换方式,继续使用默认值。

    使用 Git 命令的默认终端,继续使用默认值。

    Git 的本地结构

工作区

写代码,添加文件、修改文件的地方。

暂存区

临时存储 打算提交尚未提交的文件。

本地库

储存每次提交的历史版本。

工作过程

新建文件 在工作区,使用 git add 添加到暂存区,使用 git commit 提交到本地库。

Git 和代码托管中心

代码托管中心的任务:维护远程库

局域网环境:Gitlab服务器

外网环境:GitHub、码云

本地库和远程库

团队内部协作

push

甲 先创建一个本地库,为了将本地库推送到远程托管中心。于是在代码托管中心创建了空的远程库。然后使用 push 将本地内容推送到远程库。

clone

乙 创建本地库,使用 clone 从远程库下载文件到本地库,clone本身带有创建和初始化本地库的功能。

推送权限

因为远程库属于 甲,此时 乙 无法将本地库文件推送到远程库。需要 甲 邀请 乙 加入团队后才可以。

pull

当 乙 将本地库推送到远程库以后,甲 可以使用 pull 将远程库文件更新到本地库。

跨团队协作

fork

丙 是团队外成员,使用 fork 复制一个新的远程库。这个远程库的内容与 甲 创建的一样,不过所有者是 丙。

上传地址

丙 从这个远程库 clone 下文件。修改后使用 pull 上传到的地方是 丙 自己的远程库。甲 的远程库内容不受影响。

pull request

丙 使用 pull request 发起一个拉取的请求。

merge

甲 对 丙请求的文件进行审核,审核通过后使用 merge 合并到 甲 的远程库。

本地库初始化

使用 git bash 打开 git 命令行窗口。这个命令行窗口兼容 Linux 命令。

命令:mkdir

当前文件下新建文件夹。

命令:git init

初始化空的本地库,.git文件夹。

.git 文件夹中存放的是本地库相关的子文件夹和文件,不要随意删除或修改。

设置签名

作用是区分不同开发人员的身份。形式是用户名和邮箱。

登录远程库的账号、密码和这个没有任何关系。

git config

项目级别/仓库级别:仅在当前本地库范围内有效。

设置用户名和密码:

git config user.name baoyuan

git configuser.emailbaoyuan@qq.com

git config --global

系统用户级别:登录当前操作系统用户范围。

设置用户名和密码:

git config --global user.name baoyuan

git config --globaluser.emailbaoyuan@qq.com

级别优先级

就近原则:二者都有时,使用项目级别的签名

只有系统用户级别的签名,以系统用户级别的为准

不允许二者都没有的情况

签名信息保存位置

项目级别:

.git文件夹下的config文件内

系统级别:

C/Users/administrator文件夹下 的.gitconfig文件内

提交到本地库

命令:git status

显示当前所在分支,本地库提交历史,当前可提交文件。功能类似于查看警告,查看当前本地库状态,会有提示信息。查看工作区和暂存区的状态。

命令:git add + 文件

将工作区文件添加到暂存区

命令:git rm --cached + 文件

将提交到暂存区的文件删除,只剩下工作区文件

命令:git commit + 文件

类似于添加注释。同时将暂存区文件添加到本地库。

执行后 跳转到 vim 编辑器,vim编辑器下:

1、命令:  :set nu

显示行号

2、命令:  :wq

退出

命令:cat + 文件名+后缀

查看文件内容

命令:vim + 文件名+后缀

打开文件可供修改

命令:git commit -m "注释内容" + 文件名

可以不用打开 vim 编辑器进行操作

修改后执行命令:git checkout -- 文件可以撤销刚才所做的修改

命令:git log

查看日志,即本地库历史版本

多屏显示:空格向下,b向上翻页,q退出

命令:rm + 文件名

删除工作区的文件,之后可以把删除操作提交到本地库。删除的文件可以从历史版本中找回。只要曾经提交到了本地库,就可以从历史版本中恢复。没提交过的那就别想了。

命令:git diff + 文件名

将工作区与暂存区比较

命令:git diff HEAD + 文件名

将工作区与本地库进行比较,也可以指定历史版本进行比较

命令:git diff

不加文件名,是将工作区中所有的文件进行比较

版本选择

下面三个指令确定查看版本日志以及哈希索引值

命令:git log --pretty=oneline

显示简洁日志,只包括哈希值和 commit 注释

命令:git log --oneline

显示哈希值缩写和 commit 注释

只显示当前版本的历史版本,不显示后面的版本

命令:git reflog

显示移动到某个版本所需要的步数

显示所有版本信息

命令 git reset --hard + 哈希索引值

这是最长用的版本更换操作,可以根据索引值选择要去的版本

命令 git reset --hard HEAD

指向当前指针指向的位置

git reset --hard^

回退一个版本,需要回退多少版本则写多少个 ^

当版本数太多时,可以使用--hard~n来回退 n 个版本

reset 命令的三个参数对比

1、soft 参数

移动本地库指针,不会改变工作区和暂存区

2、mixed 参数

在本地库移动指针

重置暂存区,不改变工作区

3、hard 参数

在本地库移动指针

重置工作区和暂存区

分支操作

功能就是复制一个副本进行修改,修改过程中不会影响主干的运行。实际上就是一个指针,指向本地库。

master

是主干

命令:git branch + 分支名

创建分支

命令:git branch -v

查看有哪些分支

命令:git checkout + 分支名

切换分支

命令:git checkout + 主干名

切换回主干

命令:git marge + 分支名

合并分支内容到主干,当然也可以合并主干到分支

当两个分支的内容有冲突时,合并后文件内会有提示,以供开发者手动修改。文件修改完成后,需要执行git add + 文件名提交到暂存区,再执行git commit -m + "日志信息"上传到本地库。这个过程要注意的是,commit 时不用写入文件名。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容