Git基础知识及常用命令总结

目录

Git基础知识

Git简史

Git仓库

Git仓库的组成

Git仓库的文件状态

Git版本管理

Git中的版本演化关系图

Git版本变化的存储方式

Git常用命令

本地Git仓库部分

获取Git仓库

暂存与放弃修改操作

撤销操作

查看操作

分支与合并操作

远程Git仓库部分

查看、添加远程仓库

抓取、拉取与推送

参考资料


Git基础知识

Git简史

2005年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权利。为了Linux Kernel的持续开发,Linux的缔造者Linus Torvalds与众多Linux开源社区的开发者基于使用BitKeeper时的经验教训进行了Git的设计和开发。

初版Git就发行于2005年,随着时间的发展,Git日臻成熟完善。如今它依然是世界上最先进的分布式版本控制系统。

Git仓库

Git仓库的组成

典型的Git仓库由以下三部分组成:

  • 本地的CMDB(Configuration Management Database,配置管理数据库)
  • 工作目录
  • 暂存区

本地的CMDB存在于Git仓库中.git目录(通常是隐藏的)下,存储着所有的版本控制数据;

工作目录即本地文件系统,存储Git仓库中的文件;

暂存区隔离工作目录和Git仓库,被称为区域但其实只是在文件上打标记来区分(见下一节:Git仓库的文件状态)。

Git仓库的文件状态

每个文件处于以下三种状态之一(打标记实现):

  • 已修改(Modified)
  • 已暂存(Staged)
  • 已提交(Committed)

三者的互相转换可参考下图:

文件状态转换

Git版本管理

Git中的版本演化关系图

版本演化关系图(Object Graph)是一个有向无环图,体现了一个Git仓库的历史。下图是一个简单的例子:

Object Graph

图中一条边A->B表示“在版本B的基础上作出变化,形成了版本A”,除此之外,还要注意以下几点:

  • HEAD指向当前commit对象
  • 分支(branch)只是一个指向commit对象的名称
  • 除去初始commit外,每个commit对象指向一个父对象
  • 一个commit对象最多有两个父对象——通常只有一个,合并(Merge)操作才会有两个
  • 多个commit对象可以指向同一个父对象——创建分支(branch)后产生

Git版本变化的存储方式

传统的版本控制工具存储版本之间变化的代码行,而Git存储版本之间变化的文件。这样做方便了使用者创建不同的分支,但缺点在于如果要查看两个版本间的差异则需要进行比较处理。

下图为变化在Object Graph中表现方式的一个示例:

Git版本变化的存储方式

Git常用命令

本地Git仓库部分

获取Git仓库

1、本地初始化创建仓库

$ git init

此命令将把当前目录初始化为Git仓库(生成隐藏的.git目录)。

2、克隆现有的仓库

$ git clone <url>

从url克隆同名仓库至当前目录。

假如要指定仓库的名字,可在命令后添加额外的参数指定。

暂存与放弃修改操作

$ git add .
# 将当前目录下所有已修改文件添加到暂存区
$ git add *
# 将仓库所有已修改文件添加至暂存区(不包括文件名以'.'开头的文件)
$ git add [filename]
# 将指定文件添加到暂存区
$ git rm [filename]
# 同时删除暂存区和本地文件
$ git rm --cached [filename]
# 从暂存区删除但不删本地文件

撤销操作

$ git commit --amend
# 重新提交上次提交(一般用于添加漏掉的文件)
$ git checkout -- <file>
# 撤销对文件所做的修改
$ git reset HEAD <file>
# 撤销文件暂存

查看操作

$ git status
# 查看未暂存、已暂存的修改,如果关联了远程库还包括本地库与远程库的比较
$ git diff
# 查看未暂存文件变化
$ git diff --cached
# 查看已暂存文件与上次提交之间的变化
$ git diff HEAD
# 查看未暂存和已暂存的所有差异,是对以上两种的复合
$ git branch -a
# 查看所有分支
$ git branch -v
# 查看每一个分支的最后一次提交

分支与合并操作

$ git checkout -b [branch]
# 新建一个分支,并切换到此分支
$ git branch [branchname]
# 新建一个分支,但仍停留在当前分支
$ git branch –d [branch]
# 删除指定分支
$ git checkout [branchname]
# 切换到指定分支,并更新工作区
$ git merge [branch]
# 合并分支到当前分支
$ git branch -m old_name new_name
# 修改分支名

以下为部分操作的示意图:

远程Git仓库部分

查看、添加远程仓库

$ git remote
# 查看远程仓库(使用-v参数会显示简写和地址)
$ git remote add <shortname> <url>
# 添加远程仓库

Git支持多个远程仓库关联同一个本地仓库,使用git clone命令实际上自动添加了一个远程仓库。

抓取、拉取与推送

$ git fetch <remote>
# 访问远程仓库,从中拉取所有你还没有的数据,而且会自动添加此远程仓库
$ git pull
# 从最初克隆的服务器上抓取并自动尝试合并到当前所在的分支
$ git push <remote> <branch>
# 推送到远程仓库,若未指定remote和branch则推送至默认远程仓库的默认分支

参考资料

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值