- 09
- 10月
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.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.7 提交变更 commit
将暂存区的变更提交到版本仓库中:
git commit
输入上述命令之后,会打开一个编辑器窗口输入提交信息。
注解
不同操作系统打开的编辑器可能会不同。
直接提交部分有变更的文件:
git commit a.txt b.txt
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.12 合并 merge
合并操作是用得比较多的操作,用于不同分支之间的合并。
4 其他操作
清除本地仓库中失效的远程分支:
git remote prune origin
查看暂存区中的变更差异:
git diff --cached
暂存文件的部分改动:
git add -p [file_name]
只合并部分提交 Cherry Pick
储藏(Stash)未提交的更改:
git stash
取出储藏的更改:
git stash apply