git的基本操作

git的工作就是常见和保存你项目的快照及之后的快照进行对比.本片文章对有段创建与提交你的项目快照的命令作介绍.

获取与创建项目命令

git init 

用git init 在目录中创建新的 git 仓库,你可以在任何时候,任何目录这么做,完全是本地化的.

在目录中执行 git init,就可以创建一个 git 仓库了,比如我们创建runoob项目:

$ mkdir runoob
$ cd runoob/
$ git init
Initialized empty Git repository in /Users/tianqixin/www/runoob/.git/
# 在 /www/runoob/.git/ 目录初始化空 Git 仓库完毕。

 现在你可以看到在你的项目中生成了.git这个子目录,这就是你的git仓库了,所有有关你的此项目的快照数据都存放在这里.

ls -a
.    ..    .git

 git clone

使用 git clone 拷贝一个 Git 仓库到本地,让自己能够查看该项目,或者进行修改.

如果你需要与他人合作一个项目,或者想要复制一个项目,看看代码,你就可以克隆那个项目.执行命令:

git clone [url]

 [url]为你想要复制的项目,就可以了.

例如我们克隆GitHub上的项目:

$ git clone git@github.com:schacon/simplegit.git
Cloning into 'simplegit'...
remote: Counting objects: 13, done.
remote: Total 13 (delta 0), reused 0 (delta 0), pack-reused 13
Receiving 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 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 status
On branch master

Initial commit

Changes 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.runoob.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.runoob.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/README
new file mode 100644
index 0000000..8f87495
--- /dev/null
+++ b/README
@@ -0,0 +1 @@
+# Runoob Git 测试
diff --git a/hello.php b/hello.php
new file mode 100644
index 0000000..69b5711
--- /dev/null
+++ b/hello.php
@@ -0,0 +1,3 @@
+<?php
+echo '菜鸟教程:www.runoob.com';
+?>
View Code

 

 

git commit

使用 git add 命令将想要快照的内容写入缓存区,而执行git commit 将缓存区内容添加到仓库中.

git 为你的每一个提交记录你的名字与电子邮箱地址,所以第一步需要配置用户名和邮箱地址.

$ git config --global user.name 'runoob'
$ git config --global user.email test@runoob.com

 接下来我们写入缓存,并提交对hello.php 的有所改动.在首个例子中,我们使用-m选项以在命令行中提供提交注释.

$ git add hello.php
$ git status -s
A  README
A  hello.php
$ $ git commit -m '第一次版本提交'
[master (root-commit) d32cf1f] 第一次版本提交
 2 files changed, 4 insertions(+)
 create mode 100644 README
 create mode 100644 hello.php

 现在我们已经记录了快照,如果我们在执行git status:

$ git status
# On branch master
nothing 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.runoob.com';
echo '菜鸟教程:www.runoob.com';
?>

 

在执行以下命令:

git commit -am '修改 hello.php 文件'
[master 71ee2cb] 修改 hello.php 文件
 1 file changed, 1 insertion(+)

 

git reset HEAD

git reset HEAD 命令用于取消已缓存的内容.

我们先改动文件README 文件,内容如下

# Runoob Git 测试
# 菜鸟教程 

hello.php 文件修改为:

<?php
echo '菜鸟教程:www.runoob.com';
echo '菜鸟教程:www.runoob.com';
echo '菜鸟教程:www.runoob.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 status
On 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

 地址:http://www.runoob.com/git/git-basic-operations.html

posted @ 2019-03-21 11:12  小白°  阅读(164)  评论(0编辑  收藏  举报