Git入门

git初始化

设置你的名字和email,这些是你再提交commit时的签名,每次提交记录中都会包含这些信息。

使用git config命令进行配置:

git config --global user.name 'haohj'
git config --global user.email 'haohj@outlook.com'

执行了上面的命令后,就会在C:\Users\Administrator下建立一个叫.gitconfig的文件(Administrator是我本机的用户名)。内容一般是像下面这样的

[user]
	email = haohj@outlook.com
	name = haohj

上面的配置文件就是Git全局配置文件,一般的配置方法是git config --global <配置名称> <配置的值>。

如果你想使项目里的某个值与前面的全局设置有区别(例如把私人邮箱地址改为工作邮箱),你可以在项目中使用git config命令不带 --global选项来设置。这会在你当前的项目目录下创建.git/config,从而使用针对当前项目的配置。

获得一个Git仓库

有两种方法可以得到一个Git仓库:一种是从已有的Git仓库中clone (克隆,复制);还有一种是新建一个仓库,把未进行版本控制的文件进行版本控制。

Clone一个仓库

git clone https://github.com/haohj/gitproject

初始化一个新的仓库

对一个已存在的文件夹使用下面的命令让它置于Git的版本控制管理之下。

git init

正常的工作流程

git的基本工作流程如下:

  1. 创建或修改文件
  2. 使用git add命令添加新创建或修改的文件到本地的缓存区(Index)
  3. 使用git commit命令提交到本地代码库
  4. (可选,有的时候并没有可以同步的远端代码库)使用git push命令将本地代码库同步到远端代码库

创建或修改文件

在项目目录下创建一个文件,比如我们创建一个README.md文件。

创建完可以使用git status命令查看当前git仓库的状态,可以发现刚刚创建的文件处于untracked状态,下一步我们需要使用git add命令将这些文件加入到缓存区(Index)。

使用git add加入缓存区

使用git add命令将新建的文件添加到缓存区:

git add README.md

使用git commit提交修改

当所有新建,修改的文件都被添加到了缓存区,我们就需要使用git commit提交到本地仓库

git commit -m "add README.md"

注意

  • 新建文件,修改文件,都需要使用git add命令添加到缓存区才可以提交。
  • 删除文件,则需要直接使用git rm命令删除后会自动将已删除文件的信息添加到缓存区,git commit提交后就会将本地仓库中的对应文件删除。

如果我们还希望将本地仓库关联到远端服务器,我们可以使用git remote命令,不同于git clone命令,直接将远端的仓库克隆下来。如果我们当前的仓库是使用git init初始化的本地仓库,那么我们需要将本地仓库与远程仓库关联,使用如下命令(需要修改下面的远程仓库地址为自己的仓库地址

git remote add origin https://github.com/haohj/gitproject.git

对于上述命令而言,git remote add命令用于添加远程主机,origin是主机名,此处我们可以自定义,不一定非要使用origin。

这个时候如果本地的仓库连接到了远程Git服务器,可以使用下面的命令将本地仓库同步到远端服务器:

git push origin 

分支与合并

Git的可以让你在主线(master分支)之外进行代码提交,同时又不会影响代码库主线。分支的作用体现在多人协作开发中,比如一个团队开发软件,你负责独立的一个功能需要一个月的时间来完成,你就可以创建一个分支,只把该功能的代码提交到这个分支,其它同事仍然可以继续使用主线开发,你每天的提交不会对他们造成任何影响。当你完成功能后,测试通过再把你的功能分支合并到主线。

创建分支

一个Git仓库可以维护很多开发分支。现在我们来创建一个新的叫test的分支:

git branch test

运行git branch命令可以产科当前的分支列表,以及目前的开发环境处在哪个分支上。

snapshot_1536889561734.png

切换分支

通过刚才的查看分支命令我们可以看到,test分支是我们刚才创建的,master分支是Git系统默认创建的主分支。星号标识了你当前工作在哪个分支下。使用如下命令可以切换到其它分支:

git checkout test

切换到test分支,切换完成后,我们先编辑一下里面的一个文件,再提交(commit)改动,最后切回“master”分支

snapshot_1537152975156.png

这时我们会发现刚刚修改的内容看不到了。这是因为我们刚刚是在test分支下修改的,现在切换回了master分支,目录下的文件都是master分支上的文件了。

合并分支

现在我们在master分支上继续做一些不同的修改

snapshot_1537153361424.png

这时两个分支有了各自不同的修改,分支内容都已经不同了,需要使用git merge命令来合并test到主线分支master。

snapshot_1537153562456.png

-m参数仍然是需要填写合并的注释信息。

  • 如果两个分支修改的文件不同,那么就不会有冲突,执行上面的命令后合并就完成了。
  • 如果两个分支都修改了同一个文件,则合并失败。

我们刚刚的修改就是第二种情况,现在合并失败了。这时我们用git status命令查看状态会发现文件显示both modified。

snapshot_1537153954684.png

查看文件就会看到文件中有git自动产生的冲突<<<<<<<<<符号

snapshot_1537154192844.png

这时需要我们手动解决冲突然后再重新提交。

删除分支

当我们完成合并后,不再需要test时,可以使用下面的命令删除:

git branch -d test

git branch -d只能删除那些已经被当前分支合并的分支。如果你要强制删除某个分支的话就需要用git branch -D

撤销一个合并

如果你觉得你合并后的文件有问题,想把当前的修改都放弃,可以使用下面的命令回到合并之前的状态:

git reset --hard HEAD^

快速向前合并

还有一种需要特殊对待的情况在前面没有提到。通常,一个合并会产生一个合并提交(commit),把两个父分支的每一行内容都合并进来。

但是,如果当前的分支和另一个分支没有内容上的差异,就是说当前分支的每一个提交(commit)都已经存在另一个分支里了,git就会执行一个“快速向前”(fast forward)操作;git不创建任何新的提交(commit),只是将当前分支只想合并进来的分支。

Git日志

查看日志

git log命令可以显示所有的提交(commit):

git log

如果提交的历史记录很长,回车会逐步显示,输入q可以退出。

git log有很多选项,可以使用git help log查看。Git会根据git log命令的参数,按时间顺序显示相的提交。

日志统计

如果使用--stat选项使用git log,则会显示在每个提交中哪些文件被修改了,这些文件分别添加或删除了多少行内容,这个命令相当于打印详细的提交记录。

git log --stat

格式化日志

你可以按你的要求来格式化日志输出。--pretty参数可以使用若干表现格式,如oneline:

git log --pretty=oneline

或者你也可以使用short格式:

git log --pretty=short

你也可以用medium,full,fuller,email或raw。如果这些格式不完全符合你的需求,你也可以用--pretty=format参数定义格式。

--graph选项可以可视化你的提交图,会用ASCII字符来画出一个很漂亮的提交历史(commit history)线:

git log --graph --pretty=oneline

日志排序

日志记录可以按不同的顺序来显示。如果你要指定一个特定的顺序,可以为git log命令添加顺序参数。

按默认情况,提交会按照时间逆序排列显示,可以指定--topo-order参数,让提交按拓扑顺序来先(就是子提交在它们的父提交前显示)。

git log --pretty=format:'%h : %s' --topo-order --graph

你也可以用--reverse参数来逆向显示所有提交日志。

posted @ 2018-09-20 16:33  名字不知道起什么好呢  阅读(683)  评论(0编辑  收藏  举报