1 Git快速使用
1.1 创建git仓库
打开Git Bash,输入下面的指令,可以快速创建一个git仓库:
mkdir git-test // 创建一个新的文件夹git-test
git init // 初始化一个git仓库
上图是初始化一个git仓库的过程。
1.2 配置git账户
使用下面指令配置git账户
git config --global user.email "you email"
1.3 编写代码
根据下面的指令创建一个新的文件readme.md,然后编辑readme.md文件,并使用git status查看状态。
touch readme.md // 创建一个新文件readme.md
git status // 会报错:没有把readme.md文件添加至暂存区
git add readme.md // 将readme.md文件加入暂存区
git status // 不报错:这个时候会告知readme.md是新加入的文件
上图是我整个操作的过程截图。
1.4 提交更改至本地仓库
很明显,使用git commit 指令可以提交代码至本地仓库,下面是指令与操作过程:
git commit -m "add a new file readme.md" // 提交代码
git log // 查看历史提交信息
1.5 加入C++代码
这一步我将创建创建一个新的cpp文件,并将其提交到主分支master中去:
touch main.cpp
git commit -m "add a new cpp file main.cpp"
main.cpp里面的代码如下图所示:
1.6 创建新的分支
有的时候我们需要加入一些测试性的新特性,但是不想在主分支上进行修改,因此我们可以创建新的分支。
git checkout -b feature/new-variable // 创建一个新的分支
该指令会创建一个名为feature/new-variable的新分支,并且跳转到这个分支上去,我们可以在这个新分支上面加入我们需要的代码:
int a = 10;
加入上面代码后,我们同样需要将它加入暂存区,之后再提交至本地仓库,可以使用git log 查看该分支的提交日志。
切换回主分支,查看主分支的提交信息,看看有什么不同的地方:
可以看到,相比新的分支而言,主分支master少了一次提交信息,这就是创建新分支的特点。
1.7 合并新的分支
一般而言,没有被合并的分支是不能被删除的,这是git的一种保护机制。例如对我们刚刚创建的新分支feature/new-variable进行删除操作会得到下面的结果:
git branch -d feature/new-variable // 删除名为feature/new-variable的分支
上面图片中的结果告诉我们,feature/new-variable分支没有被合并,如果非得删除它的话,可以将指令中的d改成D。
使用下面指令可以将feature/new-variable分支合并到主分支上面去,并且我们可以看到主分支多了一个新的提交日志:
git merge feature/new-variable
合并好这个分支后,我们再次尝试一下删除这个分支,这个时候可以成功删除了:
git branch // 查看分支信息
git branch -d feature/new-variable
git branch // 再次查看分支信息,可以发现分支feature/new-variable已被删除
1.8 更高级的合并
1.7中的合并它是一种比较简单的合并,因为它们都有相同的父版本,直接把子分支的内容合并到主分支即可,下面我们将合并的情况是,不但子分支进行了修改,而且主分支也有修改。
首先我们将创建一个新的分支bugFix/new-bug,然后我在这个分支上加入新的代码(包含bug)。
git checkout -b bugFix/new-bug
这种合并情况下,需要多一次的提交,我们可以输入指令git log查看提交信息,如下图:
1.9 变基(rebasing)
这里我们将用到的指令是git rebase,它可以将之前没有的提交加入到当前分支中去。下面将演示一下使用rebase指令的例子:
这里我将之前的bugFix/new-bug分支删除了,然后新建了一个分支bugFix/fix-bug。我们先使用git log 看一下这两个分支的提交情况。
这是主分支master的提交情况:
这是分支bugFix/fix-bug的提交情况:
下面我们在bugFix/fix-bug下面使用rebase指令,看看会发生什么事情:
git rebase master
从上面的图中我们可以看到,这个指令将master中特有的提交add a new line on readme.md加入到当前分支bugFix/fix-bug中来了。这个时候其实bugFix/fix-bug和master这两个分支已经有了共同的父版本,所以我们这个时候切换到master中去,并将bugFix/fix-bug合并到主分支中去:
git checkout master
git merge bugFix/fix-bug
可以看到,这次合并不像1.8那样,会多一次合并提交情况了。