Git 的工作便是创建和保留你项目的快照及与之后的快照进行对比。本章将对相关创建与提交你的项目快照的命令作介绍。
获取与创建项目命令
git init
用 git init 在目录中创建新的 Git 仓库。 你能够在任何时候、任何目录中这么做,完全是本地化的。
在目录中执行 git init,就能够创建一个 Git 仓库了。例如咱们创建 run 项目:
$ mkdir runoob
$ cd runoob/$ git initInitialized empty Git repository in /Users/tianqixin/www/runoob/.git/# 在 /www/run/.git/ 目录初始化空 Git 仓库完毕。
此刻你能够看到在你的项目中生成为了 .git 这个子目录。 这便是你的 Git 仓库了,所有相关你的此项目的快照数据都存放在这儿。
ls -a. .. .git
git clone
运用 git clone 拷贝一个 Git 仓库到本地,让自己能够查看该项目,或进行修改。
倘若你需要与他人合作一个项目,或想要复制一个项目,瞧瞧代码,你就能够克隆那个项目。 执行命令:
git clone [url]
[url] 为你想要复制的项目,就能够了。
例如咱们克隆 Github 上的项目:
$ git clone git@github.com:schacon/simplegit.gitCloning into simplegit...remote: Counting objects: 13, done.remote: Total 13 (delta 0), reused 0 (delta 0), pack-reused 13Receiving objects: 100% (13/13), done.Resolving deltas: 100% (2/2), done.Checking connectivity... done.
克隆完成后,在当前目录下会生成一个 simplegit 目录:
$ cd simplegit/$ ls
README Rakefile lib
以上操作将复制该项目的所有记录。
$ ls -a. .. .git README Rakefile lib
$ cd .git
$ ls
HEAD description info packed-refs
branches hooks logs refs
config index objects
默认状况下,Git 会根据你供给的 URL 所指示的项目的名叫作创建你的本地项目目录。 一般便是该 URL 最后一个 / 之后的项目名叫作。倘若你想要一个不同样的名字, 你能够在该命令后加上你想要的名叫作。
基本快照
Git 的工作便是创建和保留你的项目的快照及与之后的快照进行对比。本章将对相关创建与提交你的项目的快照的命令作介绍。
git add
git add 命令可将该文件添加到缓存,如咱们添加以下两个文件:
$ touch README
$ touch hello.php
$ ls
README hello.php
$ git status -s?? README?? hello.php
$
git status 命令用于查看项目的当前状态。
接下来咱们执行 git add 命令来添加文件:
$ git add README hello.php
此刻咱们再执行 git status,就能够看到这两个文件已然加上去了。
$ git status -s
A README
A hello.php
$
新项目中,添加所有文件很广泛,咱们能够运用 git add . 命令来添加当前项目的所有文件。
现在咱们修改 README 文件:
$ vim README
在 README 添加以下内容:# Runoob Git 测试,而后保留退出。
再执行一下 git status:
$ git status -s
AM README
A hello.php
"AM" 状态的意思是,这个文件在咱们将它添加到缓存之后又有改动。改动后咱们在执行 git add 命令将其添加到缓存中:
$ git add .$ git status -s
A README
A hello.php
当你要将你的修改包括在即将提交的快照里的时候,需要执行 git add。
git status
git status 以查看在你上次提交之后是不是有修改。
我演示该命令的时候加了 -s 参数,以得到简短的结果输出。倘若没加该参数会仔细输出内容:
$ git statusOn branch masterInitial commitChanges to be committed:
(use "git rm --cached <file>..." to unstage) new file: README
new file: hello.php
git diff
执行 git diff 来查看执行 git status 的结果的仔细信息。
git diff 命令表示已写入缓存与已修改但尚未写入缓存的改动的区别。git diff 有两个重点的应用场景。
尚未缓存的改动:git diff
查看已缓存的改动: git diff --cached
查看已缓存的与未缓存的所有改动:git diff HEAD
表示摘要而非全部 diff:git diff --stat
在 hello.php 文件中输入以下内容:
<?php
echo :www.run.com;?>$ git status -s
A README
AM hello.php
$ git diff
diff --git a/hello.php b/hello.php
index e69de29..69b5711 100644--- a/hello.php+++ b/hello.php@@ -0,0 +1,3 @@+<?php+echo :www.run.com;+?>
git status 表示你上次提交更新后的更改或写入缓存的改动, 而 git diff 一行一行地表示这些改动详细是啥。
接下来咱们来查看下 git diff --cached 的执行效果:
$ git add hello.php
$ git status -s
A README
A hello.php
$ git diff --cached
diff --git a/README b/READMEnew file mode 100644index 0000000..8f87495--- /dev/null+++ b/README@@ -0,0 +1 @@+# Runoob Git 测试diff --git a/hello.php b/hello.phpnew file mode 100644index 0000000..69b5711--- /dev/null+++ b/hello.php@@ -0,0 +1,3 @@+<?php+echo 菜鸟教程:www.runoob.com;+?>
git commit
运用 git add 命令将想要快照的内容写入缓存区, 而执行 git commit 将缓存区内容添加到仓库中。
Git 为你的每一个提交都记录你的名字与电子邮箱位置,因此第1步需要配置用户名和邮箱位置。
$ git config --global user.name run$ git config --global user.email test@run.com
接下来咱们写入缓存,并提交对 hello.php 的所有改动。在首个例子中,咱们运用 -m 选项以在命令行中供给提交注释。
$ git add hello.php
$ git status -s
A README
A hello.php
$ $ git commit -m
第1次版本提交[master (root-commit) d32cf1f]
第1次版本提交
2 files changed, 4 insertions(+)
create mode 100644 README
create mode 100644 hello.php
此刻咱们已然记录了快照。倘若咱们再执行 git status:
$ git status# On branch masternothing to commit (working directory clean)
以上输出说明咱们在近期一次提交之后,无做任何改动,是一个"working directory clean:干净的工作目录"。
倘若你无设置 -m 选项,Git 会尝试为你打开一个编辑器以填写提交信息。 倘若 Git 在你对它的配置中找不到关联信息,默认会打开 vim。屏幕会像这般:
# Please enter the commit message for your changes. Lines starting# with # will be ignored, and an empty message aborts the commit.# On branch master# Changes to be committed:# (use "git reset HEAD <file>..." to unstage)## modified: hello.php#~~".git/COMMIT_EDITMSG" 9L, 257C
倘若你觉得 git add 提交缓存的流程太过繁琐,Git 亦准许你用 -a 选项跳过这一步。命令格式如下:
git commit -a
咱们先修改 hello.php 文件为以下内容:
<?php
echo :www.run.com;echo 我爱学习:www.run.com;?>
再执行以下命令:
git commit -am 修改 hello.php 文件[master 71ee2cb] 修改 hello.php 文件
1 file changed, 1 insertion(+)
git reset HEAD
git reset HEAD 命令用于取消已缓存的内容。
咱们先改动文件 README 文件,内容如下:
# Run Git 测试#
hello.php 文件修改为:
<?php
echo :www.run.com;echo :www.run.com;echo :www.run.com;?>
此刻两个文件修改后,都提交到了缓存区,咱们此刻要取消其中一个的缓存,操作如下:
$ git status -s
M README
M hello.php
$ git add .$ git status -s
M README
M hello.pp
$ git reset HEAD -- hello.php
Unstaged changes after reset:M hello.php
$ git status -s
M README
M hello.php
此刻你执行 git commit,只会将 README 文件的改动提交,而 hello.php 是无的。
$ git commit -m 修改[master f50cfda] 修改
1 file changed, 1 insertion(+)$ git status -s
M hello.php
可以看到 hello.php 文件的修改并未提交。
此时咱们能够运用以下命令将 hello.php 的修改提交:
$ git commit -am 修改 hello.php 文件[master 760f74d] 修改 hello.php 文件
1 file changed, 1 insertion(+)$ git statusOn branch master
nothing to commit, working directory clean
简而言之,执行 git reset HEAD 以取消之前 git add 添加,但不期盼包括在下一提交快照中的缓存。
git rm
倘若只是简单地从工作目录中手工删除文件,运行 git status 时就会在 Changes not staged for commit 的提示。
要从 Git 中移除某个文件,就必须要从已跟踪文件名单中移除,而后提交。能够用以下命令完成此项工作
git rm <file>
倘若删除之前修改过并且已然放到暂存区域的话,则必须要用强制删除选项 -f
git rm -f <file>
倘若把文件从暂存区域移除,但仍然期盼保存在当前工作目录中,换句话说,仅是从跟踪名单中删除,运用 --cached 选项就可
git rm --cached <file>
如咱们删除 hello.php文件:
$ git rm hello.php
rm hello.php$ ls
README
不从工作区中删除文件:
$ git rm --cached README
rm README$ ls
README
能够递归删除,即倘若后面跟的是一个目录做为参数,则会递归删除全部目录中的所有子目录和文件:
git rm –r *
进入某个目录中,执行此语句,会删除该目录下的所有文件和子目录。
git mv
git mv 命令用于移动或重命名一个文件、目录、软连接。
咱们先把刚移除的 README 添加回来:
$ git add README
而后对其重名:
$ git mv README README.md
$ ls
README.md