Home » Misc » Git 简易指南
  • 09
  • 10月

Git 简易指南

Git 是一款免费、开源的分布式版本控制系统, 用于敏捷高效地处理任何或小或大的项目。

Git 是一个开源的分布式版本控制系统, 可以有效、高速的处理从很小到非常大的项目版本管理。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

1   基本概念

版本库
Git 版本库(repository)只是一个简单的数据库, 其中包含所有用来维护与管理项目的修订版本和历史的信息。 在 Git 中,跟大多数版本控制系统一样, 一个版本库维护项目整个生命周期的完整副本。 然而,不同于其他大多数 VCS,Git 版本库不仅仅提供版本库中所有文件的完整副本, 还提供版本库本身的副本。
提交 commit
一个提交( commit )对象保存版本库中每一次变化的元数据, 包括作者、提交者、提交日期和日志消息。 每一个提交对象指向一个目录树对象, 这个目录树对象在一张完整的快照中捕获提交时版本库的状态。 最初的提交或者根提交(root commit)是没有父提交的。 大多数提交都有一个父提交,但一个提交可以引用多个父提交。
工作区 Working Directory
就是你在电脑里能看到的目录。 我们会想当然的认为,当前仓库所在目录就是我们的工作区,其实这是不完全正确的。 在当前仓库中,新增,更改,删除文件这些动作,都发生在工作区里面。
暂存区 Stage
英文叫 Stage, 或 Index 。 在版本库 .git 目录下,有一个 index 文件。 它实际上就是一个包含文件索引的目录树,像是一个虚拟的工作区。 在这个虚拟工作区的目录树中,记录了文件名、文件的状态信息(时间戳、文件长度等), 文件的内容并不存储其中,而是保存在 Git 对象库( .git/objects )中, 文件索引建立了文件和对象库中对象实体之间的对应。 如果当前仓库,有文件更新,并且使用 git add 命令, 那么这些更新就会出现在暂存区中。
分支 Branch

Git 的分支,其实本质上仅仅是指向提交对象的可变指针。 Git 的默认分支名字是 master 。 在多次提交操作之后,你其实已经有一个指向最后那个提交对象的 master 分支。 它会在每次的提交操作中自动向前移动。

注解

Git 的 master 分支并不是一个特殊分支。 它就跟其它分支完全没有区别。 之所以几乎每一个仓库都有 master 分支, 是因为 git init 命令默认创建它, 并且大多数人都懒得去改动它。

2   基础操作

2.1   基础配置

设置用户名和邮箱:

git config --global user.name "Your Name"
git config --global user.email "email@example.com"
git config --global push.default simple

设置换行符转换规则(提交时转换为 LF, 检出时不转换, 确保换行符的统一性):

git config --global core.autocrlf input
git config --global core.safecrlf true

(上面两行等价于只有文件换行符为 LF 时才能提交)

记住用户名和密码:

git config --global credential.helper store

设置 GUI 界面编码:

git config --global gui.encoding utf-8

设置多余的空白着色(git diff 时会标亮):

git config --global core.whitespace \
    trailing-space,space-before-tab,-indent-with-non-tab

2.2   新建仓库 init

在当前目录新建一个空白仓库:

git init repo-name

将当前目录变成仓库:

git init .

2.3   克隆仓库 clone

将一个仓库克隆到本地:

git clone https://git.coding.net/wtx358/wtxlog

SSH 协议方式:

git clone ssh://git@git.coding.net/wtx358/wtxlog

2.4   添加文件 add

添加新文件到暂存区:

git add <file> ...

添加修改过的文件(即已在仓库中的文件)到暂存区:

git add <file> ...

从暂存区移除文件

从暂存区移除新添加的文件:

git rm --cached <file> ...

从暂存区移除修改过的文件(即已在仓库中的文件):

git reset HEAD <file> ...  # HEAD 可忽略

2.5   查看状态 status

用于查看工作区中的文件的状态(比如新增,修改,删除等):

git status

2.6   查看差异 diff

查看工作区中的文件变更差异:

git diff

查看暂存区中的变更差异:

git diff --cached

2.7   提交变更 commit

将暂存区的变更提交到版本仓库中:

git commit

输入上述命令之后,会打开一个编辑器窗口输入提交信息。

注解

不同操作系统打开的编辑器可能会不同。

直接提交部分有变更的文件:

git commit a.txt b.txt

2.8   查看提交历史 log

最简单的查看提交历史的命令:

git log

输入上述命令之后就可以分页查看当前分支所有的提交记录了。

2.9   分支操作

创建本地分支:

git branch -b feature-test

创建可追踪的分支:

git checkout --track origin/develop

切换分支:

git checkout feature-test

查看分支:

git branches

删除分支:

git branch -d feature-test

注解

若目标分支没有完全合并到当前分支,则不允许删除,若要强制删除, 可使用 -D 参数。

2.10   文件移动 mv

用于将仓库中的文件移动或者改名:

git mv a.txt b.txt

2.11   文件删除 rm

用于将仓库中的文件删除:

git rm a.txt

2.12   合并 merge

合并操作是用得比较多的操作,用于不同分支之间的合并。

4   其他操作

清除本地仓库中失效的远程分支:

git remote prune origin

查看暂存区中的变更差异:

git diff --cached

暂存文件的部分改动:

git add -p [file_name]

只合并部分提交 Cherry Pick

储藏(Stash)未提交的更改:

git stash

取出储藏的更改:

git stash apply
Tags:   git .