一文学会Git
一、GIT下载、安装与配置
1.下载与安装
下载git只需要直接在官网下载就可以了,它会自动下载适合你电脑配置的版本。
官网
安装就一直下一步就可以了。
2.配置
安装完成之后右键菜单就会自动添加两个选项:
- Git GUI
- Git Bash
在任意目录下右键点击 Git Bash 打开Git 命令行,输入一下两条命令:
1 | git config --global user.name "USERNAME" |
“USERNAME”填写你的用户名
“xxx@xx.com”填写你的邮箱
这样配置完后你之后所创建的仓库都会默认创建在你的名下。
查看你的配置,输入下面的命令:
1 | git config --list |
其中有两条条目为user.name和user.email即为你所配置的。
二、Git基本操作
1、新建仓库
进入一个你要进行Git的目录(通常是你的工程目录)然后在右键菜单中进入Git Bash,键入命令:
1 | git init |
它会在当前目录下创建一个.git的隐藏文件夹用来保存与git操作有关的相关信息。
2、向仓库暂存区里添加文件
1 | git add FILENAME |
命令可以将文件添加到你所创建的仓库的暂存区中。
关于add命令有俩点需要注意:
1.add现在还没有真正添加到仓库中,而是作为预备项来决定是否最终添加到仓库中。
2.这里的添加文件并不是你所在仓库的文件有了这个文件就可以了。仓库创建好后并不等于你所在文件夹中的所有文件也同样包含于仓库中,你需要手动告诉Git你要添加当前目录下的哪些文件到它的仓库中。
你可以用以下命令来将所在文件夹下属的所有文件或者文件夹添加到暂存区中:1
2
3git add --all/-A
or
git add *
3、向仓库中提交文件
我们已经把文件添加到了暂存区,那么怎样让文件真正进去仓库呢?用commit命令:
1 | git commit -m "you need to record something" |
这个命令可以让你将暂存区中的文件添加到仓库中。
-m 选项是必选项,它需要你在提交时给他一下信息用于记录你的提交的原因。当然我们也提倡这样做。
4、一次性从工作区提交到仓库中
有时候修改完文件要提交仓库中,要先添加到暂存区后再提交,很麻烦怎么办?给 git commit 加上 -a 选项:
1 | git commit -a -m "say something" |
5、查看git状态
不知道你的文件现在处于未跟踪状态还是处在暂存区,或者是一提交状态?用status命令:
1 | git status |
它会告诉你当前文件夹中的文件的状态和分支情况。
6、从暂存区或仓库中移除文件
如果你想删除一个文件,但是已经将它放入了暂存区中,如何去删除暂存区中的文件呢?
先将本地文件删除,再使用下面的命令:1
git rm FILENAME
就可以将暂存区中的文件移除了。
当然,直接一同删除本地文件和暂存区文件也可以,添加 -f 选项。
那如果已经提交到仓库中了怎么办?
从仓库中删除文件可以在上条命令的基础上添加–cached选项。
注意:如果之前你的本地目录中有该文件,从仓库中删除并不会把本地文件一并删除,所删除的文件在本地中会重新变为未跟踪状态。
那么我不想删除本地文件,又不想把它提交到仓库中,该怎么办呢?
7、添加忽略列表
可以在本地目录中添加一个名为 .gitignore 的文件,用来记录哪些文件需要被忽略。
直接在.gitignore文件中添加你不想被跟踪的文件即可。
github上有一个项目列举了各种忽略列表:ignore
8、重命名文件
你可以中暂存区和仓库中修改文件的名字。
使用下面的命令:
1 | git mv FILE_FROM FILE_TO |
实际上,git并不会直接将名字修改,mv命令相当于下面三条命令:
1 | mv README.md README |
9、查看提交历史
在提交了若干更新,又或者克隆了某个项目之后,如果查看提交历史呢?
使用下面的命令:1
git log
它会按照时间线(由近及远)列出你的提交历史,包括SHA-1 校验、日期、提交者以及提交说明。
log命令有很多选项,他可以满足你的各种查看需求:
-p,用来显示每次提交的内容差异。 你也可以加上 -NUMBER 来仅显示最近两次提交:
例如:1
git log -p -2
来查看近俩次提交之间的差异。
–stat选项可以看到每次提交的简略的统计信息。
–pretty选项可以指定不同的显示格式。
其下有各种子选项:short、oneline、full、fuller、format等。
使用如下:1
git log --pretty=oneline
会将每次提交在各自独自的一行中显示。
pretty选项中的format选项可以自定义选项格式:
例如:1
git log --pretty=format:"%h - %an, %ar : %s"
完成的选项如下图:
选项 | 说明 |
---|---|
%H | 提交对象(commit)的完整哈希字串 |
%h | 提交对象的简短哈希字串 |
%T | 树对象(tree)的完整哈希字串 |
%t | 树对象的简短哈希字串 |
%P | 父对象(parent)的完整哈希字串 |
%p | 父对象的简短哈希字串 |
%an | 作者(author)的名字 |
%ae | 作者的电子邮件地址 |
%ad | 作者修订日期(可以用 –date= 选项定制格式) |
%ar | 作者修订日期,按多久以前的方式显示 |
%cn | 提交者(committer)的名字 |
%ce | 提交者的电子邮件地址 |
%cd | 提交日期 |
%cr | 提交日期,按多久以前的方式显示 |
%s | 提交说明 |
–graph 显示 ASCII 图形表示的分支合并历史。
下面列举了一些常见的log下的选项:
选项 | 说明 |
---|---|
-p | 按补丁格式显示每个更新之间的差异。 |
–stat | 显示每次更新的文件修改统计信息。 |
–shortstat | 只显示 –stat 中最后的行数修改添加移除统计。 |
–name-only | 仅在提交信息后显示已修改的文件清单。 |
–name-status | 显示新增、修改、删除的文件清单。 |
–abbrev-commit | 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。 |
–relative-date | 使用较短的相对时间显示(比如,“2 weeks ago”)。 |
–graph | 显示 ASCII 图形表示的分支合并历史。 |
–pretty | 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。 |
你还可以限制输出的长度,包括按条目个数、时间和提交者等。这里就不一一列举了,需要的时候查一下即可。
10、回滚版本
接下来我们学习git最核心的操作————回滚。
我们学会了通过git log 来查看提交信息,会发现每次commit之后都有一串数字和字母的组合,而这串字符串是系统自动生成的唯一的代表了这次提交请求的一个ID,我们可以通过这串字符串来任意回滚到之前某一次提交上去。
例如:1
git checkout 9643a881f
将回退到这串字符串所代表的那次提交的状态上。
回滚的时候,并不需要将整个字符串都复制下来,从开头的一部分去截取也是可以的。
11、撤销操作
(1)撤销提交后的操作
当我们提交到了仓库文件以后,发现有一些文件漏添加了,或者提交信息写错了,这时就需要撤销操作。
先将你需要的文件添加到暂存区,然后使用下面的命令:1
git commit --amend -m "say something"
来覆盖你之前的那次提交,之前的那次提交不会出现在你提交的历史中。也就是说最终你只用最后一次的提交结果。
(2)撤销暂存区中的操作
如果不小心把不想放入暂存区的文件放入了暂存区,那么如何来撤销暂存区中的记录呢?
使用下面的命令:1
git reset HEAD FILENAME
执行之后你会发现原本在暂存区中的文件,已经变成 了未跟踪状态。
(3)撤销已修改文件的操作
如果你修改了文件,却想撤回。此时文件并没有放入暂存区中,只是单纯的在工作环境中做了修改,那该怎么撤销呢?
其实git status命令已经告诉你了:
1 | Changes not staged for commit: |
我们来使用下:
1 | git checkout --FIIENAME |
这时你发现原本修改过的操作变成了之前未更改的状态。
12、给Git起别名
如果不想使用Git本身的起名方式,那么可以通过起别名的方式来替换到Git默认的命令:1
git config --global alias.ci commit
会将commit命令替换为ci,下次提交时,只要输入git ci就ok了。
当然,你也可以将常用的组合命令替换为一个命令:1
git config --global alias.last 'log -1 HEAD'
输入git last将会看到最后一次提交。
三、标签管理
Git可以给历史中的某一次提交打上一个标签,用来标识这次提交,它相当于那次提交的引用,同样可以使用标签来回滚到所代表的提交。
1、创建标签
如何在当前提交上打标签呢?使用下面的命令:
1 | git tag -a v1.9 -m "some message" |
-a选项表示创建一个新的标签。
-m和commit命令中的一样,为必填项,为标签添加一些注释。
还有一种轻量打标签的方式:1
git tag v1.1.1
这种不需要选项而直接给当前的提交打上标签。
4、查看标签
使用下面的命令来查看所有标签:1
git tag
当然,在log命令中,你打的标签也会出现在提交的右边。
你也可以加-l 来进行特定的模式查找标签:1
git tag -l v1.*
将列出tags中以v1.开头的标签。
你也可以查看某一标签所代表的提交,使用下面的命令:
1 | git show v1.1 |
将显示打标签者,标签信息,时间和哪一次提交。
5、给之前的提交打标签
如何给之前的提交打标签呢?
只要看一下那次提交的ID字符串就可以了:1
git tag -a v1.2 9fceb02
将会给那次提交打上一个标签。
6、给远程仓库打标签
由于默认情况下,git push命令不会将标签传输到远程仓库,你需要显示的将标签传送到远程仓库中:1
git push origin TAGNAME
当然如果想传送的标签很多,可以使用带有–tags选项将所有标签全部传送到远程仓库中。
四、使用远程仓库
我相信有相当大的一部分人,是想学习github的使用,之后才了解到了Git。这两者不是一种东西,git和github的关系,相当于球与球场的关系。git创建的是本地仓库,而github上存放了好多远程的仓库。这些仓库都是用户将自己的仓库上传到服务器上,让github来托管这些仓库。那么如何建立远程仓库以及让本地仓库与远程仓库关联起来呢?