写在前面
文章内容:主要介绍一下 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许可证)