基本用法
使用 git add
命令将新建的文件添加到缓存区:
$ git add file1 file2 file3
然后再次执行 git status
就会发现新的变化:
$ git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: file1
new file: file2
new file: file3
你现在为 commit
做好了准备,你可以使用 git diff
命令再加上 --cached
参数,看看缓存区中哪些文件被修改了。进入到 git diff --cached
界面后需要输入 q
才可以退出:
$ git diff --cached
如果没有--cached
参数,git diff
会显示当前你所有已做的但没有加入到缓存区里的修改。
如果你要做进一步的修改, 那就继续做, 做完后就把新修改的文件加入到缓存区中。
当所有新建,修改的文件都被添加到了缓存区,我们就要使用 git commit
提交到本地仓库:
$ git commit -m "add 3 files"
需要使用 -m
添加本次修改的注释,完成后就会记录一个新的项目版本。除了用 git add
命令,我们还可以用下面的 -a
参数将所有没有加到缓存区的修改也一起提交,但 -a
命令不会添加新建的文件。
$ git commit -a -m "add 3 files"
再次输入 git status
查看状态,会发现当前的代码库已经没有待提交的文件了,缓存区已经被清空。
至此,我们完成了第一次代码提交,这次提交的代码中我们创建了三个新文件。需要注意的是如果是修改文件,也需要使用 git add
命令添加到缓存区才可以提交。如果是删除文件,则直接使用 git rm
命令删除后会自动将已删除文件的信息添加到缓存区,git commit
提交后就会将本地仓库中的对应文件删除。
这时如果我们希望将本地仓库关联到远端服务器,我们可以使用 git remote
命令,不同于刚刚的 git clone
命令,直接将远端的仓库克隆下来。
我们当前的仓库是使用 git init
初始化的本地仓库,所以我们需要将本地仓库与远程仓库关联,使用如下命令(需要修改下面的远程仓库地址为自己的仓库地址):
$ git remote add origin https://github.com/kinglion580/shiyanlou.git
对于上述命令而言,git remote add
命令用于添加远程主机,origin
是主机名,此处我们可以自定义,不一定非要使用 origin
,而 https://github.com/kinglion580/shiyanlou.git
,是我自己的远程仓库,此处 需要替换为自己的远程仓库地址
这个时候如果本地的仓库连接到了远程Git服务器,可以使用下面的命令将本地仓库同步到远端服务器:
# 需要输入仓库对应的用户名和密码
$ git push origin master
本节讲解了几个基本命令:
- git config:配置相关信息
- git clone:复制仓库
- git init:初始化仓库
- git add:添加更新内容到索引中
- git diff:比较内容
- git status:获取当前项目状况
- git commit:提交
- git branch:分支相关
- git checkout:切换分支
- git merge:合并分支
- git reset:恢复版本
- git log:查看日志
现在我们对项目做些修改:
$ cd gitproject
# 向README文件添加一行
$ echo "new line" >> README.md
# 添加新的文件file1
$ echo "new file" >> file1
使用 git status
查看当前修改的状态:
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: README.md
Untracked files:
(use "git add <file>..." to include in what will be committed)
file1
no changes added to commit (use "git add" and/or "git commit -a")
可以看到一个文件修改了,另外一个文件添加了。如何查看修改的文件内容呢,那就需要使用 git diff
命令。git diff
命令的作用是比较修改的或提交的文件内容。
$ git diff
diff --git a/README.md b/README.md
index 21781dd..410e719 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,3 @@
gitproject
==========
+new line
上面的命令执行后需要使用 q
退出。命令输出当前工作目录中修改的内容,并不包含新加文件,请注意这些内容还没有添加到本地缓存区。
将修改内容添加到本地缓存区,通配符可以把当前目录下所有修改的新增的文件都自动添加:
$ git add *
再执行 git diff
会发现没有任何内容输出,说明当前目录的修改都被添加到了缓存区,如何查看缓存区内与上次提交之间的差别呢?需要使用 --cached
参数:
$ git diff --cached
diff --git a/README.md b/README.md
index 21781dd..410e719 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,3 @@
gitproject
==========
+new line
diff --git a/file1 b/file1
new file mode 100644
index 0000000..fa49b07
--- /dev/null
+++ b/file1
@@ -0,0 +1 @@
+new file
可以看到输出中已经包含了新加文件的内容,因为 file1 已经添加到了缓存区。
最后我们提交代码:
$ git commit -m 'update code'
提交后 git diff
与 git diff --cached
都不会有任何输出了。
比较分支
可以用 git diff 来比较项目中任意两个分支的差异。
我们首先创建一个新的分支 test
,并在该分支上提交一些修改:
# 创建test分支并切换到该分支
$ git branch test
$ git checkout test
# 添加新的一行到file1
$ echo "branch test" >> file1
# 创建新的文件file2
$ echo "new file2" >> file2
# 提交所有修改
$ git add *
$ git commit -m 'update test branch'
然后,我们查看 test 分支和 master 之间的差别:
$ git diff master test
diff --git a/file1 b/file1
index fa49b07..17059cd 100644
--- a/file1
+++ b/file1
@@ -1 +1,2 @@
new file
+branch test
diff --git a/file2 b/file2
new file mode 100644
index 0000000..80e7991
--- /dev/null
+++ b/file2
@@ -0,0 +1 @@
+new file2
git diff
是一个难以置信的有用的工具,可以找出你项目上任意两个提交点间的差异。可以使用 git help diff
详细查看其他参数和功能。
如果你要查看当前的工作目录与另外一个分支的差别,你可以用下面的命令执行:
# 切换到master
$ git checkout master
# 查看与test分支的区别
$ git diff test
diff --git a/file1 b/file1
index 17059cd..fa49b07 100644
--- a/file1
+++ b/file1
@@ -1,2 +1 @@
new file
-branch test
diff --git a/file2 b/file2
deleted file mode 100644
index 80e7991..0000000
--- a/file2
+++ /dev/null
@@ -1 +0,0 @@
-new file2
你也以加上路径限定符,来只比较某一个文件或目录:
$ git diff test file1
diff --git a/file1 b/file1
index 17059cd..fa49b07 100644
--- a/file1
+++ b/file1
@@ -1,2 +1 @@
new file
-branch test
上面这条命令会显示你当前工作目录下的 file1 与 test 分支之间的差别。
--stat
参数可以统计一下有哪些文件被改动,有多少行被改动:
$ git diff test --stat
file1 | 1 -
file2 | 1 -
2 files changed, 2 deletions(-)