Git
Git安装
sudo apt install git
Git配置
Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:
/etc/gitconfig
文件:系统中对所有用户都普遍适用的配置。若使用git config
时用--system
选项,读写的就是这个文件。~/.gitconfig
文件:用户目录下的配置文件只适用于该用户。若使用git config
时用--global
选项,读写的就是这个文件。- 当前项目的 Git 目录中的配置文件(也就是工作目录中的
.git/config
文件):只要去掉--global
选项重新配置即可,这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以.git/config
里的配置会覆盖/etc/gitconfig
中的同名变量。
git config --global user.name ""
git config --global user.email ""
暂存区
将文件往 Git 版本仓库中添加的时候,是分两步执行的:
-
用
git add
把文件添加进去,实际上就是把文件修改添加到暂存区; -
用
git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。
Git使用
有些时候,在必须把某些文件放到 Git 工作目录中,但又不能提交它们时,比如保存了数据库密码的配置文件等等。我们就需要在工作目录下创建一个.gitignore
文件,然后把要忽略的文件名填进去,这样 Git 就会自动忽略这些文件了。
有哪些文件是需要忽略的呢?有以下几种:
- 操作系统自动生成的文件,比如缩略图等;
- 编译生成的中间文件、可执行文件,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没有必要放进版本仓库;
- 带有敏感信息的配置文件,比如存放数据库密码的配置文件等。
基础使用
提交
git commit
在当前的分支下提交修改记录,如果没有修改分支的情况下,位于master分支;
创建分支
git branch newImage
创建newImage分支,但是在没有切换分支的情况下,仍然处于master分支;
切换分支
git checkout newImage
切换分支的命令,切换到newImage分支;
合并
git merge bugFix
将bugFix
合并到master
注:merge是将其后所指定的节点合并到HEAD指向的节点,并在HEAD指向的节点下延长
git rebase
,Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去;Rebase 的优势就是可以创造更线性的提交历史。
-
新建并切换到
bugFix
分支git branch bugFix; git checkout bugFix
-
提交一次
git commit
-
切换回
master
分支再提交一次git checkout master; git commit
-
再次切换到
bugFix
分支,rebase
到master
上git checkout bugFix; git rebase master
进阶使用
在提交树上移动
从 bugFix
分支中分离出 HEAD 并让其指向一个提交记录。
git checkout C4
相对引用
通过指定提交记录哈希值的方式在 Git 中移动不太方便。在实际应用时,并没有像本程序中这么漂亮的可视化提交树供你参考,所以你就不得不用 git log
来查查看提交记录的哈希值。通过哈希值指定提交记录很不方便,所以 Git 引入了相对引用。使用相对引用的话,你就可以从一个易于记忆的地方(比如 bugFix
分支或 HEAD
)开始计算。
相对引用非常给力,这里我介绍两个简单的用法:
- 使用
^
向上移动 1 个提交记录 - 使用
~
向上移动多个提交记录,如~3
首先看看操作符 (^)。把这个符号加在引用名称的后面,表示让 Git 寻找指定提交记录的父提交。所以 master^
相当于“master
的父节点”;master^^
是 master
的第二个父节点。
git checkout HEAD~4
git checkout bugFix^
强制修改分支位置
可以直接使用 -f
选项让分支指向另一个提交。例如:
git branch -f master HEAD~3
上面的命令会将 master 分支强制指向 HEAD 的第 3 级父提交。
git branch -f master C6
git checkout HEAD^
git branch -f bugFix HEAD^
变更撤销
主要有两种方法用来撤销变更:git reset
和 git revert
。
git reset
向上移动分支,原来指向的提交记录就跟从来没有提交过一样。
git reset HEAD~1
Git 把 master 分支移回到 C1
;现在我们的本地代码库根本就不知道有 C2
这个提交了。(注:在reset后, C2
所做的变更还在,但是处于未加入暂存区状态。)
虽然在你的本地分支中使用 git reset
很方便,但是这种“改写历史”的方法对大家一起使用的远程分支是无效的哦!为了撤销更改并分享给别人,我们需要使用 git revert
。
git revert HEAD