Git 基本操作

Git 的工作就是创建和保存你项目的快照及与之后的快照进行对比。本章将对有关创建与提交你的项目快照的命令作介绍。


获取与创建项目命令

git init

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

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

$ mkdir custom
$ cd custom/
$ git init
Initialized empty Git repository in /Users/tianqixin/www/custom/.git/
# 在 /www/custom/.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 status,就可以看到这两个文件已经加上去了。

$ git status -s
A  README
A  hello.php
$ 

新项目中,添加所有文件很普遍,我们可以使用 git add . 命令来添加当前项目的所有文件。

现在我们修改 README 文件:

$ vim README

在 README 添加以下内容:# custom 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 masterInitial commitChanges to be committed:(use "git rm --cached <file>..." to unstage)new file:   READMEnew 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.57.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 @@
+# lucaswu57 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.57.com';
+?>

git commit

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

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

$ git config --global user.name 'lucasewu57'
$ git config --global user.email test@lucasewu57.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 READMEcreate 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.57.com';
echo '菜鸟教程:www.57.com';
?>

再执行以下命令:

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

git reset HEAD

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

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

# lucasewu57 Git 测试
# 菜鸟教程 

hello.php 文件修改为:

<?php
echo '菜鸟教程:www.57.com';
echo '菜鸟教程:www.57.com';
echo '菜鸟教程:www.57.com';
?>

现在两个文件修改后,都提交到了缓存区,我们现在要取消其中一个的缓存,操作如下:

$ git status -sM READMEM 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  READMEM hello.php

现在你执行 git commit,只会将 README 文件的改动提交,而 hello.php 是没有的。

$ git commit -m '修改'
[master f50cfda] 修改1 file changed, 1 insertion(+)
$ git status -sM 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 rm 会将条目从缓存区中移除。这与 git reset HEAD 将条目取消缓存是有区别的。 "取消缓存"的意思就是将缓存区恢复为我们做出修改之前的样子。

默认情况下,git rm file 会将文件从缓存区和你的硬盘中(工作目录)删除。

如果你要在工作目录中留着该文件,可以使用 git rm --cached

如我们删除 hello.php文件:

$ git rm hello.php
rm 'hello.php'
$ ls
README

不从工作区中删除文件:

$ git rm --cached README
rm 'README'
$ ls
README

git mv

git mv 命令做得所有事情就是 git rm --cached 命令的操作, 重命名磁盘上的文件,然后再执行 git add 把新文件添加到缓存区。

我们先把刚移除的 README 添加回来:

$ git add README 

然后对其重名:

$ git mv README  README.md
$ ls
README.md

【Git 教程(5)】 Git基本操作相关推荐

  1. git 教程2 (git常用命令解说)

    <1>$ git -- help (调出git的帮助文档) <2>$ git +命令 --help (查看某个具体命令的帮助文档) <3>$ git --versi ...

  2. 【git教程】git安装、本地仓库与远程仓库使用详细指南

    git版本控制工具 下载地址:https://www.git-scm.com/download/win 选择对应版本的工具,下载后是一个exe执行文件: 本文使用到的git命令 命令 作用 git a ...

  3. #Git教程:Git简介 @FDDLC

    1.VCS:Version Control System:版本控制系统 Git:一款分布式VCS SVN:一款集中式VCS 2.Git原理图: 3.Git的基本概念: 1)工作区:下面的repo1目录 ...

  4. 【Git】Git教程

    尊重原创:https://blog.csdn.net/fuqiuai/article/details/79495834 基本操作 1.安装git: sudo apt-get install git 安 ...

  5. 别人总结的一些git教程大全

    工作中,除了必备的基础知识,还要学会与人合作. 如何将你开发的小功能整合到整个项目的大框架中 如何让你的实验性代码不影响到大框架中的代码性能 如何让你放下手中写到一半的代码去修改突然出现的bug 这些 ...

  6. Git教程学习总结(分享给热爱学习的你,团队的协作离不开你呀)

    目录 Git 教程 Git 安装配置 Git 工作流程 Git 工作区.暂存区和版本库 Git 创建仓库 Git 基本操作 Git 分支管理 Git 查看提交历史 git log git blame ...

  7. 深入浅出Git教程(转载)

    目录 一.版本控制概要 1.1.什么是版本控制 1.2.常用术语 1.3.常见的版本控制器 1.4.版本控制分类 1.4.1.本地版本控制 1.4.2.集中版本控制 1.4.3.分布式版本控制 1.5 ...

  8. 深入浅出Git教程+一个小时学会Git(转载)(堪称完美)

    转载自: https://www.cnblogs.com/best/p/7474442.html#!comments 目录 一个小时学会Git 一.版本控制概要 工作区 暂存区 本地仓库 远程仓库 1 ...

  9. 分布式版本控制系统 Git 教程

    简介 Git 是什么? Git 是一个开源的分布式版本控制系统. 什么是版本控制? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统. 什么是分布式版本控制系统? 介绍分布 ...

最新文章

  1. sqlserver 循环赋值变量
  2. LipNet与ICLR评委互怼始末:名气大又怎样,还不是被拒绝了
  3. 云信技术系列课 | RTC 系统音频弱网对抗技术发展与实践
  4. eos操作系统_EOS基础全家桶(十一)智能合约IDE-EOS_Studio
  5. javaparser_JavaParser入门:以编程方式分析Java代码
  6. 如何使用Dependabot保持环境最新
  7. 狂奔的瑞幸咖啡讲了一个好故事 但还缺失一种 “感觉”
  8. 希尔排序python 简书_数据结构_排序_直接插入+希尔排序
  9. pycharm写python字典_pycharm_字典
  10. 2013年C++A:神奇的算式
  11. 加减法叫做什么运算_加减法的意义及运算定律、性质
  12. 有个人在偷偷的爱着你
  13. 螺旋扩孔的效率高,但侧壁质量不如步进扩孔
  14. 微软媒体服务器,Azure 媒体服务概述
  15. 计算机正确的按键手法游戏,原神pc操作方法 基础按键与常见动作教程
  16. Linux man page命令后的数字含义
  17. 二叉数先序,中序,后序排列(递归与非递归)
  18. 有道云笔记,熊掌记和 Effie 哪个适合单口或脱口秀作者?
  19. 用芝麻二维码生成器制作App下载二维码
  20. 在线破解网吧下载限制工具的制做方法。。

热门文章

  1. SEER流量众筹模块开发测试网络及使用文档发布
  2. 《初级会计电算化实用教程(金蝶ERP—K/3版)》一1.4 会计核算软件
  3. 毕业设计 Spring Boot的驾校预约管理系统(含源码+论文)
  4. 用计算机弹不可说,U盘无法弹出,到底是什么程序被占用了?
  5. 毕业设计-----个人理财app的设计与实现效果展示
  6. 免费C++IDE(官方版)
  7. 微电网逆变器DROOP控制_SIMULINK_模型搭建详解
  8. 云原生模式--设计拥抱变化的软件(三)
  9. JSF+A4J+Spring调用ORACLE存贮过程的拙作
  10. 数据带宽 总线带宽区别_如何减少数据量(和带宽)流服务的使用