写在前面
文章内容:主要介绍一下 Git 中的一些基本命令,这些命令都是最基本最常用的
目标读者:Git 初学者
需具备知识:至少需要知道什么是版本控制,以及什么是 Git 。可以参考我的这篇文章:Git简介(上):版本控制 与 Git 的崛起
所需时间:纯阅读文章大概需要 10min,边做边实践大概 30min~50min注意:git 包含很多概念性和技术性的细节,这些细节纷繁复杂,有些还不易理解,本文只是基础性的介绍,为了保持行文的清晰简明,除了必要的说明,我忽略了这些细节。各位读者遇到不懂的细节需要自己查阅相关文档。
文章较长,可以使用
Control + F
查找相关内容阅读
〇、命令列表
命令 | 意义 |
---|---|
git config |
配置相关信息 |
git clone |
复制仓库 |
git init |
创建版本库 |
git add |
添加更新内容到索引中 |
git commit |
提交 |
git status |
获取当前项目状况 |
git diff |
比较内容 |
git branch |
分支相关 |
git checkout |
切换分支 |
git merge |
合并分支 |
git log |
查看日志 |
一、配置自己的 git 信息
第一次使用 git 需要使用命令git config
修改自己的信息,以方便项目其他成员查看是谁提交的,一般包括提交人的名字、邮箱地址等。命令格式为:git config --global <配置名称> <配置值>
具体操作:
git config --global user.name "foo"
git config --global user.email "bar@jianshu.com"
二、你得有一个版本库先
两种方法,一种是从别人的版本库中克隆一份一模一样的;一种是自己创建一个新的版本库。分别使用命令git clone
和git init
。
- 克隆一个版本库
命令格式为:git clone <远程仓库地址>
远程仓库地址 Git URL 支持ssh://
, http(s)://
, git://
等协议。有些仓库(例如 GitHub)可以通过不只一种协议来访问。
具体操作:
git clone git_URL
clone 操作完成后,当前目录下会多一个目录,该目录下的文件就是刚刚 clone 下来的项目文件。
- 自己创建一个版本库
只需在已有的项目目录中执行一条命令 git init
即可。
具体操作:
cd project_dir
git init
操作完成后仓库就被初始化了。
无论方法 1 还是方法 2,操作完成后都会在项目目录下自动创建一个 .git
目录,里面有一些进行版本控制的相关文件,请勿手动修改这些文件,否则会破坏版本库。
三、添加文件到版本库
需要用到两个命令:git add
和 git commit
。
假设我们现在已经新建了一个 README.md
文件,需要把它加入到版本库中,需要进行如下操作:
git add README.md
git commit -m "add new file"
这里的两个命令会很让人困惑。事实上,Git 有工作区、版本库的两个概念,Git 的版本库里存了很多东西,其中最重要的就是称为 stage
(或者叫index
)的暂存区,还有 Git 为我们自动创建的第一个分支 master
,以及指向 master 的一个指针叫 HEAD
。我们编辑文件时都是在工作区进行的,编辑完成后使用 git add
命令将修改放进暂存区中,而不是将修改直接加进版本库中。当所有的编辑修改完成后使用 git commit
命令将暂存区的内容提交到版本库的分支(master
或其他),这才是真正存放版本信息的地方。而且,git commit
提交的只是暂存区中的内容,如果你在git add
将修改添加到暂存区之后又做了一些修改但没有add
时,commit
只会提交你add
的版本,之后的修改仍留在了工作区并没有提交到版本库。
当项目已经做了一些修改,但还无法提交到仓库时,应当
git add file1 file2 file3 ...
将当前的修改添加进暂存区。
当只做了一次修改就完全可以提交时,可以使用git commit -a -m "..."
命令来一次性提交。这里增加了一个-a
的命令选项,它会将工作区的所有文件都提交到仓库,即使还没有添加到暂存区。
-m "..."
的意思是后面输入的是本次提交的说明,会保存到版本库的日志文件中。可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
四、查看当前状态和对比不同
命令:git status
和git diff
意义:假如对文件做了修改,这时版本库的状态显然和之前是不一样的,使用git status
可以查看;在新的内容添加到暂存区或者提交到版本库后,可以使用git diff
查看当前版本与上次版本的不同。
假设我对README.md
文件增加了新内容,但还没添加到暂存区,此时查看状态显示如下:
$ git status
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动)
修改: README.md
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
此时查看README.md
文件的不同:
$ git diff README.md
diff --git a/README.md b/README.md
index a9fd153..1ac9d3a 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,4 @@
Hello, git!
new line
new line2
+new line3
使用git add
或git stage
添加到暂存区后查看状态:
$ git add README.md
$ git status
位于分支 master
要提交的变更:
(使用 "git reset HEAD <文件>..." 以取消暂存)
修改: README.md
此时再git diff README.md
将不会有任何内容,因为修改已经添加到了暂存区,需要使用git diff --cached
来查看暂存区的修改情况:
$ git diff --cached
diff --git a/README.md b/README.md
index a9fd153..1ac9d3a 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,4 @@
Hello, git!
new line
new line2
+new line3
git commit
提交后查看状态:
$ git status
位于分支 master
无文件要提交,干净的工作区
五、分支管理
项目仓库的文件和各个修改的提交构成了一个被称为「分支」的概念,一个项目版本库可以有多个不同的分支,各分支间互相独立。当多人协作进行项目开发时,为了能够并行开发,每个成员在自己的分支下进行开发,提交的代码不会影响其他人,再所有开发都完成后,再将所有分支合并。
Git 提供了相较于其他版本控制系统性能更加优越的分支管理能力,提供了包括但不限于git branch
创建分支,git checkout
切换分支,git merge
合并分支等功能。
git branch
创建分支
git branch branch_name
查看当前已有的所有分支:
$ git branch
*master
test
前面带*
的表示当前所在的分支。
-
git checkout
切换分支
切换到刚才创建的test
分支:
$ git checkout test
切换到分支 'test'
$ git branch
master
*test
- 也可以使用
git checkout -b branch_name
表示创建并切换 - **
git merge another_branch
合并分支**
该命令的意思是将另一个分支合并到当前分支,例如
$ git checkout master
切换到分支 'master'
$ git merge test
合并分支时可能会出现冲突,典型的情况是两个分支对同一个文件都做了修改:
$ git merge test
自动合并 README.md
冲突(内容):合并冲突于 README.md
自动合并失败,修正冲突然后提交修正的结果。
$ git status
位于分支 master
您有尚未合并的路径。
(解决冲突并运行 "git commit")
未合并的路径:
(使用 "git add <文件>..." 标记解决方案)
双方修改: README.md
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
这时查看冲突文件是这样的:
Hello, git!
<<<<<<<<<<HEAD
new line on master
============
new line on test
>>>>>>>>>>test
解决办法是手动删除冲突文件中的<<<
、====
和>>>>
等行,之后git commit -a -m "..."
即可。
六、Git 日志
以下命令请读者在自己电脑上实验查看结果
- 查看日志
git log
命令可以显示所有的提交(commit),如果提交的历史纪录很长,回车会逐步显示,输入q
可以退出。
git log
有很多选项,可以使用git help log
查看,例如下面的命令就是找出所有从"v2.5“开始在fs目录下的所有Makefile的修改:
$ git log v2.5.. Makefile fs/
Git会根据git log
命令的参数,按时间顺序显示相关的提交(commit)。
-
日志统计
如果用--stat
选项使用git log
,它会显示在每个提交(commit)中哪些文件被修改了, 这些文件分别添加或删除了多少行内容,这个命令相当于打印详细的提交记录:
git log --stat
-
格式化日志
你可以按你的要求来格式化日志输出。--pretty
参数可以使用若干表现格式,如oneline
:
git log --pretty=oneline
或者你也可以使用short
格式:
git log --pretty=short
你也可用 medium
, full
, fuller
, email
或 raw
。 如果这些格式不完全符合你的相求, 你也可以用--pretty=format
参数定义格式。
--graph
选项可以可视化你的提交图(commit graph),会用ASCII字符来画出一个很漂亮的提交历史(commit history)线:
$ git log --graph --pretty=oneline
-
日志排序
日志记录可以按不同的顺序来显示。如果你要指定一个特定的顺序,可以为git log
命令添加顺序参数。
按默认情况,提交会按逆时间顺序显示,可以指定--topo-order
参数,让提交按拓扑顺序来显示(就是子提交在它们的父提交前显示):
git log --pretty=format:'%h : %s' --topo-order --graph
你也可以用--reverse
参数来逆向显示所有提交日志。
本系列文章作为 Git 的基本介绍和简单教程到这里就完结了,写累死@_@ 有关于 Git 的更多内容网上有很多资源,请读者自行搜索。
版权声明 自由转载 - 保持署名 - 不可商用 - 不可演绎 (CC3.0 创意共享3.0许可证)