git
以下步骤均在Deepin 15.7 环境下记录,不同Linux发行版命令可能不同。(Deepin 基于 Centos 开发,所以Centos 应该也是OK的)
参考:progit 2nd Edition (2014)
- git处理数据更像是一种 stream of snapshots.* git处理数据更像是一种 stream of snapshots.
- git管理下的文件一共有三种状态
committed
: 文件已经成功的存储到本地数据库。modified
:文件已经被修改但是还没有被同步到数据库。staged
:
- 安装
> sudo apt-get install git
- 配置
> git config --global user.name "your name"
> git config --global user.email "example@email.com"
- 普通用户执行上述命令,–global选项并没有作用,可以去掉。
普通用户在执行完上述命令之后,可以看到
这个文件中已经有了刚才所输入的内容。如果是root用户执行了上述配置命令,则配置文件位于/root/.gitconfig
- 查询配置:
>git config user.name
>git config user.email
实际上,通过观察刚才的文件格式,很容易推断出,如果我们直接按照相似的格式修改文件,比如在email下一行添加他行
abc = def
,这样我们查询git config user.abc
的时候,也会得到def
的结果.
- 查看所有配置内容:
>git config --list
- 实际上,git 为每一个系统(
root,/root/.gitconfig
),每一个用户(user,~/.gitconfig
),每一个项目都有一个相应的配置文件,有的时候git读取出的配置值可能不是我们想要的。这个时候可以使用命令git config --show-origin <user.email>
来查看当前配置项的值是从哪一个文件中读取的。 - 在使用中想要获取帮助信息可以执行以下命令中的一个。
>git help <verb>
>man git-<verb>
Git Basics
整体工作流程
在空文件夹中创建一个仓库并向仓库中添加文件
1.
2.当前文件夹下多一个叫.git
的文件夹,这是一个git仓库的骨架,包含了一个git仓库所必备的所有文件。
3.写一个helloworld程序。
4.执行git add
命令,选择想要添加到仓库中的文件。
5.执行 git commit
命令将所选的文件添加到仓库
commit
到仓库的文件是执行add
命令时刻的文件。
从远程中克隆一个仓库
1.执行git clone <repository_url>
,执行该命令不是简单的从远程接收个个文件的最新版本,而是获取远程仓库中的几乎所有的内容,包括其中的每个文件的每一次修改。(git 本身是一种分布式VCS)
2.选择克隆了一个JSON解析的开源库。
3. 也可以重命名克隆的文件夹
4. 克隆的结果
使用status查看当前仓库的状态
1.有一个untracked file,也就是仓库中还没有该文件的任何记录,但是本地却新建的文件。
2. 将文件添加到要提交的队列,再次查看状态。
3. 将文件提交到仓库,再次查看状态。
4. 修改文件并提交,查看状态。
5.虽然status
显示的信息很全面,但是有时也会显得很啰嗦,使用命令git status -s
or git status --short
来获取更加简明的状态信息。还没有tracked过的文件会用符号??
表示,A
表示已经添加到staging area的新文件,M
表示修改过的文件。一共有两列状态信息输出,左侧的表示staging area的状态,右侧表示working tree的状态。如下面的MM
。
忽略一些特定的文件不提交
1. 如果想让一些文件不被自动add
(保持文件为untracked状态),可以使用配置文件.gitignore
,来配置正则表达式忽略特定类型的文件。
更多规则参考这里
.gitignore
一般位于仓库的根目录,用于对整个仓库进行限制。
.gitignore
也可以位于仓库中的各个文件夹下,则该文件中的规则只对当前文件夹下的文件有效。内层的文件不会屏蔽外层文件的效果,相互叠加。
查看已经staged或者还没有stage过的更改
- 使用
git diff
查看还没有staged过的更改。如果staging area中有该文件,则git diff
执行的是当前工作区与staging area中文件的对比。如果没有,这会将工作区的该文件与仓库中的备份比。
- 没有任何参数的
git diff
是查看你在上次git add
之后在本地修改了什么。
- 使用
git diff --staged
或git diff --cached
查看将要git commit
什么内容。比较的是staging area 与仓库中文件的不同。 - 使用
git difftool
来使用第三方工具查看不同
commit文件到仓库
git commit
命令提交,会将当前staging area中的所有内容提交到仓库,在提交之前会要求输入对当前提交的备注。git commit -m '<message>'
使用-m
标签来直接输入备注。git commit -a
使用-a
标签来将working tree和staging area中的所有更改全部提交到仓库。
注意
:使用-a
标签不会自动add
新文件,也就是说只有已经tracked过的文件会被自动跳过straging area 直接提交到仓库,而新创建的文件会被忽略。
删除文件
- 使用
rm
命令直接删除。
- 使用
git rm
命令删除
3. 第一种方式是直接修改working tree中的内容,是系统文件系统首先删除这一文件,而git对此不会产生任何干涉。第二种方式是通过git来删除文件,git会将这一删除操作记录到staging area并删除文件。实际上,在第二种方式中,git会首先对比仓库中的文件与working tree和staging area中是否有区别,如果有则不会执行操作,因为在提交git仓库前删除文件,其中最近修改的内容不会在仓库中留下记录,以后也无法恢复,这是十分危险的。所以使用git rm
也是一种更加安全的删除文件的方式。如果确定想要放弃本地修改直接删除文件。可以使用命令git rm -f
来强制删除。
4. 如果想要删除staging area中的内容而保留本地磁盘中的文件。使用命令git rm --cached
,其作用可以理解为撤销或部分撤销刚才的add操作。
移动文件
- git本身并不支持重命名文件,也就是说,如果我们本地重命名了一个文件,那么仓库中不会有任何信息来体现这一过程。
- 可以使用
git mv <source_file_name> <target_file_name>
来重命名文件。
- 实际上,
git mv <source_file_name> <target_file_name>
命令是mv <source_file_name> <target_file_name>
git rm <source_file_name>
git add <target_file_name>
三条命令的叠加。
使用git log
命令查看提交历史记录
取消操作
-
使用
git commit --amend
来修改上次的提交操作- 如果在上次commit之后直接执行
git commit --amend
,那么会获得修改备注信息的机会,而上次提交的备注信息会被忽略。2. 如果在上次commit之后直接执行git commit --amend
,那么会获得修改备注信息的机会,而上次提交的备注信息会被忽略。
3. 实际上,git commit --amend
执行后的效果是将前一次的提交完全替换掉,在替换完成之后,仓库中不会再有任何关于前一次提交的记录。
- 如果在上次commit之后直接执行
-
撤销上一次对staging area的修改。
- 使用命令
git reset HEAD <file>
来撤销上次git add
的文件。
- 使用命令
-
撤销对文件的本地修改
- 使用命令
git checkout -- <file>
撤销本地修改到上一次commit时的状态。
- 使用命令
远程协作
占坑
版本标签
占坑