为什么要使用Git

2021-03-29 11:03:00
夜之魂
转贴:
掘金
2004
可以离线工作
和他人协同工作变得简单
分支很轻松
合并很容易
Git系统速度快,也很灵活

Git 架构

版本库

一系列文件,目录,历史记录,提交记录和头指针。 可以把它视作每个源代码文件都带有历史记录属性数据结构
一个Git版本库包括一个 .git 目录和其工作目录
.git 目录(版本库的一部分)
.git 目录包含所有的配置、日志、分支信息、头指针等 
工作目录 (版本库的一部分)
版本库中的目录和文件,可以看做就是你工作时的目录
索引(.git 目录)
索引就是git中的 staging 区. 可以算作是把你的工作目录与Git版本库分割开的一层 这使得开发者能够更灵活的决定要将要在版本库中添加什么内容

提交

一个 git 提交就是一组更改或者对工作目录操作的快照 比如你添加了5个文件,删除了2个文件,那么这些变化就会被写入一个提交比如你添加了5个文件,删除了2个文件,那么这些变化就会被写入一个提交中 而这个提交之后也可以被决定是否推送到另一个版本库中
分支
分支其实就是一个指向你最后一次的提交的指针 当你提交时,这个指针就会自动指向最新的提交
头指针 与 头(.git 文件夹的作用)
头指针是一个指向当前分支的指针,一个版本库只有一个当前活动的头指针 而头则可以指向版本库中任意一个提交,每个版本库也可以有多个头

命令

初始化

创建一个新的git版本库。这个版本库的配置、存储等信息会被保存到.git文件夹中
$ git init

配置

更改设置。可以是版本库的设置,也可以是系统的或全局的
# 输出、设置基本的全局变量
$ git config --global user.email
$ git config --global user.name

$ git config --global user.email "MyEmail@qq.com"
$ git config --global user.name "My Name"

状态

显示索引文件(也就是当前工作空间)和当前的头指针指向的提交的不同
# 显示分支,未跟踪文件,更改和其他不同
$ git status

# 查看其他的git status的用法
$ git help status

添加

添加文件到当前工作空间中。如果你不使用 git add 将文件添加进去, 那么这些文件也不会添加到之后的提交之中
# 添加一个文件
$ git add HelloWorld.java

# 添加一个子目录中的文件
$ git add /path/to/file/HelloWorld.c

# 支持正则表达式
$ git add ./*.java

分支

管理分支,可以通过下列命令对分支进行增删改查
# 查看所有的分支和远程分支
$ git branch -a

# 创建一个新的分支
$ git branch myNewBranch

# 删除一个分支
$ git branch -d myBranch

# 重命名分支
# git branch -m <旧名称> <新名称>
$ git branch -m myBranchName myNewBranchName

# 编辑分支的介绍
$ git branch myBranchName --edit-description

检出

将当前工作空间更新到索引所标识的或者某一特定的工作空间
# 检出一个版本库,默认将更新到master分支
$ git checkout
# 检出到一个特定的分支
$ git checkout branchName
# 新建一个分支,并且切换过去,相当于"git branch <名字>; git checkout <名字>"
$ git checkout -b newBranch

clone

这个命令就是将一个版本库拷贝到另一个目录中,同时也将 分支都拷贝到新的版本库中。这样就可以在新的版本库中提交到远程分支
# clone xxx-docs
$ git clone https://github.com/xxx/learnxxx-docs.git

commit

将当前索引的更改保存为一个新的提交,这个提交包括用户做出的更改与信息
# 提交时附带提交信息
$ git commit -m "Added multiplyNumbers() function to HelloWorld.c"

diff

显示当前工作空间和提交的不同
# 显示工作目录和索引的不同
$ git diff

# 显示索引和最近一次提交的不同
$ git diff --cached

# 显示工作目录和最近一次提交的不同
$ git diff HEAD

log

显示这个版本库的所有提交
# 显示所有提交
$ git log

# 显示某几条提交信息
$ git log -n 10

# 仅显示合并提交
$ git log --merges

merge

合并就是将外部的提交合并到自己的分支中
# 将其他分支合并到当前分支
$ git merge branchName

# 在合并时创建一个新的合并后的提交
$ git merge --no-ff branchName

mv

重命名或移动一个文件
# 重命名
$ git mv HelloWorld.c HelloNewWorld.c

# 移动
$ git mv HelloWorld.c ./new/path/HelloWorld.c

# 强制重命名或移动
# 这个文件已经存在,将要覆盖掉
$ git mv -f myFile existingFile

pull

从远端版本库合并到当前分支
# 从远端origin的master分支更新版本库
# git pull <远端> <分支>
$ git pull origin master

push

把远端的版本库更新
# 把本地的分支更新到远端origin的master分支上
# git push <远端> <分支>
# git push 相当于 git push origin master
$ git push origin master

rm

和add相反,从工作空间中去掉某个文件
# 移除 HelloWorld.c
$ git rm HelloWorld.c

# 移除子目录中的文件
$ git rm /pather/to/the/file/HelloWorld.c

参考文献
git-scm.com/docs
发表评论
评论通过审核后显示。