Git命令行

只要输入git,Git就会不带任何参数地列出它的选项和最常用的子命令。

要得到一个完整的git子命令列表,可以输入git help --all

  • 显示版本号

    git --version

每个git子命令的文档都可以通过使用git help subcommand、git --help subcommand或者git subcommand --help

创建初始版本库

创建初始版本库

在~/public_html目录创建你的个人网站,并把它放到Git版本库里。

$ mkdir ~/public_html
$ cd ~/public_html
$ echo 'My website is alive!' > index.html

执行git init,将~/public_html或者任何目录转化为Git版本库

$ git init

Initialiaed empty Git repository in .git/

Git不关系你是从一个完全空白的目录还是由一个装满文件的目录开始的。两种情况下,将目录转移到Git版本库的过程是一样的。

为了显示目录是要给Git版本库,git init命令创建了一个隐藏目录,在项目的顶层目录,名为.git。而CVS和SVN则将修订版本信息放在项目的每一个目录下的CVS和.svn子目录里。

~/public_html目录下的一切都保持不变。Git将这个目录当做项目的工作目录,隐藏在.git内的版本库由Git维护。

将文件添加到版本库中

git init命令创建一个新的Git版本库。最初,每个Git版本库都是空的。为了管理内容,你必须明确把它放入版本库中。这种有意识的步骤将重要文件与临时文件分离开来。

使用git add file将file添加到版本库中。

$ git add index.html

tips: 如果目录中已经有了很多文件,使用git add . 命令让Git把当前目录及子目录中的文件都添加到版本库里(参数"."、点活着UNIX说法中的"dot",是当前目录的简写)。

在add之后,Git知道index.html这个文件是要留在版本库里的。然而,到目前为止,Git还只是暂存(staged)了这个文件,这时提交之前的中间步骤。Git将add和commit这两部分开,以避免频繁变化。

运行 git status 命令,显示中间状态的 index.html

$ git status

# On branch master
# Initial commit
# Changes to be committed:
# (use "git rm --cached <file>..." to unstaged)
#
# new file: index.html

这个命令显示新文件 index.html 将在下一次提交的时候添加到版本库里。

除了目录和文件内容的实际变化,Git还会在每次提交的时候记录其他一些元数据,包括日志消息和做出本次变更的作者。一条完全限定的 git commit 命令必须提供日志消息和作者。

# 在git 1.8.3.1 版本无法在没有配置用户名和用户邮箱的情况下提交成功
$ git commit -m "Initial contents of public_html" \
--author="Jon Loeliger <jdl@example.com>" Create initial commit 9da581b: Initial contents of public_html
1 files changed, 1 insertions(+), 0 deletions(-)
create mod 100644 index.html

在 git commit 期间让Git打开你最爱的编辑器,要设置你的GIT_EDITOR环境变量。

# 在tcsh中
$ setenv GIT_EDITOR emacs # 在bash中
$ export GIT_EDITOR=vim

在把这次添加新文件提交到版本库后,git status 命令显示没有突出的、暂存的变更需要提交。

$ git status

# 在 master分支上
nothing to commit(working directory clean)

配置提交者

可以用 git config 命令在配置文件里保存你的身份。

# 使用 git config --global 则表示身份配置对所有项目生效
# 删除 --global 则表示身份配只对当前仓库生效
$ git config user.name "Tucci Luo"
$ git config user.email "uetucci@163.co"

也可以使用 GIT_AUTHOR_NAME 和 GIT_AUTHOR_EMAIL 环境变量来告诉 Git 你的姓名和email地址。这些变量一旦设置就会覆盖所有的配置设置。

再次提交

来提交一次对 index.html 文件的修改。打开这个文件,转换成 HTML 并保存。

$ cd ~/public_html

# 编辑 index.html 文件

# cat index.html
<html>
<body>
My web site is alive!
</body>
</html> $ git commit index.html

因为这个文件已添加到版本库里里,没有必要再把这个文件告诉索引;此在,当在命令行里直接提交一个命名的文件时,文件的变更会自动捕捉!而使用没有命名文件的一般 git commit 就不会在这种情况下起作用。

当你的编辑器出现时,输入一条提交记录,"Convert to HTML",然后推出编辑器。现在版本库里有两个版本的 index.html了。

Convert to HTML
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# Explicit paths specified without -i nor -o; assuming --only paths...
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#

查看提交

git log 命令会产生版本库里一系列单独提交的历史

$ git log

commit a5e8a114098e5144861fa9642ebc90a29abf0d66
Author: Tucci Luo <uetucci@163.com>
Date: Wed Dec 20 22:00:43 2017 +0800 Convert to HTML commit 55e68997f60fc626ad37205c12aac818d98bbcbd
Author: Tucci Luo <uetucci@163.com>
Date: Wed Dec 20 21:49:32 2017 +0800 Initial contents of public_html

条目按照从最新到最老的顺序罗列出来;每个条目显示了提交作者的名字和 email 地址,提交日期,变更的日志信息和提交的内部识别码。

为了查看特定提交的更加详细的信息,可以使用 git show 命令带一个提交码。

git show 55e68997f60fc626ad37205c12aac818d98bbcbd

commit 55e68997f60fc626ad37205c12aac818d98bbcbd
Author: Tucci Luo <uetucci@163.com>
Date: Wed Dec 20 21:49:32 2017 +0800 Initial contents of public_html diff --git a/index.html b/index.html
new file mode 100644
index 0000000..34217e9
--- /dev/null
+++ b/index.html
@@ -0,0 +1 @@
+My website is alive!

如果在执行 git show 命令的时候没有显示指定提交码,它将只显示最近一次提交的详细信息。

另一种查看方式是使用 show-branch,提交当前开发分枝简介的但航摘要。

$ git show-branch --more=10
[master] Convert to HTML
[master^] Initial contents of public_html

参数"--more=10"表示额外10个版本(在默认显示一个基础的上在多显示10个),master这个名字是默认的分支名。

查看提交差异

为了查看 index.html 的两个版本之间的差异,使用两个提交的全 ID 名并且运行 git diff。

$ git diff  55e68997f60fc626ad37205c12aac818d98bbcbd \
a5e8a114098e5144861fa9642ebc90a29abf0d66 diff --git a/index.html b/index.html
index 34217e9..8638631 100644
--- a/index.html
+++ b/index.html
@@ -1 +1,5 @@
+<html>
+<body>
My website is alive!
+</body>
+</html>

按照惯例,名为 55e68997f60fc626ad37205c12aac818d98bbcbd 的第一次修订版本是早起版本,名为 a5e8a114098e5144861fa9642ebc90a29abf0d66 的第二次修订版本是较新的版本。因为,每行新内容前面都有一个加号(+)。

版本库内文件的删除和重命名

从版本库里删除一个文件与添加一个文件是类似的,除了使用的命令是 git rm 。 假设在你的网站里有一个不再需要的文件:poem.html,你可以这样做。

$ cd ~/public_html
# ls
index.html poem.html $ git rm poem.html
rm 'poem.html' $ git commit -m "Remove a poem"
[master 451bd56] Remove a poem
1 file changed, 1 deletion(-)
delete mode 100644 poem.html

和添加操作一样,删除操作也需要两步: git rm 表示你想要删除这个文件的意图并暂存这个变更,接着 git commit 在版本库里实现这个变更。同样,可以省略 -m 选项,然后在你最喜欢的文件编辑器中以交互方式输入日志消息。

可以通过git rm 和 git add 组合命令来间接为一个文件重命名,也可以更快而直接地通过 git mv命令来做到。这里是前者的一个例子。

$ mv foo.html bar.html
$ git rm foo.html
rm 'foo.html'
$ git add .bar.html

在这个序列里,必须先执行 mv foo.html bar.html,以防 git rm 命令会把 foo.html 从文件系统中永久删除

这是使用 git mv 的相同操作

git mv foo.html bar.html

在任一情况下,暂存的变更必须随后进行提交。

git commit -m "Moved foo to bar"
Create commit 8805821: Moved foo to bar
1 filles changed, 0 insertions(+), 0 deletions(-)
rename foo.html => bar.html (100%)

Git 在对文件的移动操作上鱼与其他同类系统不同,它利用一个基于两个文件版本内容相似度的机制。

创建版本库副本

如果按照上述步骤操作,并且在 ~/public_html 目录中已经建立了一个初始版本库,就可以通过 git clone 命令创建一个完整的副本,或叫克隆。

在主目录里建立一个副本,并命名为my_website

$ cd ~
$ git clone public_html my_website

虽然这个两个 Git 版本库现在包含相同的对象、文件和目录,但是还有一些细微的差别。如果你想要探索其中的不同之处,可以使用一下这些命令。

$ ls -lsa public_html my_website
$ diff -r public_html my_website

在这样的一个本地文件系统中,使用 git clone 命令来创建一个版本库副本和使用 cp -a 或 rsync 非常相似。但是,Git 支持一组丰富的版本库源,包括网络名。

一旦复制了一个版本库,就有修改这个复制版本、做出新的提交、查看它的日志和历史等。这是一个有着完整历史等版本库。

配置文件

Git 的配置文件全都是简单的.ini文件风格的文本文件。

Git支持不同层次的配置文件。按照优先级递减的顺序,它们如下所示。

.git/config

版本库特定的配置设置,可用 --file 选项修改,是默认选项。这些设置拥有最高优先级。

~/.gitconfig

用户特定的配置设置,可用 --global 选项修改。

/etc/gitconfig

这是系统范围的配置设置,如果你有它的UNIX文件写权限,你就可以用 --system 选项修改它。这些设置的优先级最低

例如,要建立一个作者名和 email 地址,用于你对所有版本库的所有提交,可以用 git config --global 命令给在 $HOMT=E/.gitonfig 文件里的 user.name 和 user.email 赋值。

$ git config --global user.name "Jon Loeliger"
$ git config --global user.email "Jdl@example.com"

或者,为了设置一个版本库特丁的名字和 email 地址,覆盖 --global 的设置,只需要省略 --global 标志。

$ git config user.name "Jon Loeliger"
$ git config user.email "jdl@special-project.example.com"

使用 git config -l 列出在整组配置文件里共同查找的所有变量的设置值。

# 新建一个空版本库
$ mkdir /tmp/new
$ cd /tmp/new $ git init # 设置一些配置值
$ git config --global user.name "Jon Loeliger"
$ git config --global user.email "jdl@example.com"
$ git config user.email "jdl@special-project.example.com" $ git config -l
user.name=Jon Loeliger
user.email=jdl@example.com
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
user.email=jdl@special-project.example.com

因为配置文件只是简单的文本文件,所以可以通过cat命令来查看其内容。也可以通过你最喜欢的文件编辑器来编辑它。

可以使用 --unset 选项来移除设置。

$ git config --unset --global user.email

配置别名

如果你经常输入一条常用而复杂的 Git 命令,可以考虑为它设置一个简单的 Git 别名。

$ git config --global alias.show-gragh \
'log --graph --abbrev-commit --pretty=nonline'

Git-起步的更多相关文章

  1. (三)Java工程化--Git起步

    GIT学习参考:https://git-scm.com/book/zh/v2 版本控制 版本控制记录了一个或若干文件的历史变化,便于今后查阅,恢复. 三类版本控制系统 本地版本控制系统 RCS : 本 ...

  2. 【转】Git详解之一:Git起步

    原文网址:http://blog.jobbole.com/25775/ 原文:<Pro Git> 起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后 ...

  3. Git详解之一 Git起步

    起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后试着让 Git 在你的系统上跑起来,直到最后配置好,可以正常开始开发工作.读完本章,你就会明白为什么 Git ...

  4. Git详解之一:Git起步

    起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后试着让 Git 在你的系统上跑起来,直到最后配置好,可以正常开始开发工作.读完本章,你就会明白为什么 Git ...

  5. Git 学习之git 起步(一)

    起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后试着让 Git 在你的系统上跑起来,直到最后配置好,可以正常开始开发工作.读完本章,你就会明白为什么 Git ...

  6. Git起步--git安装与初次运行git前配置

    在你开始使用 Git 前,需要将它安装在你的计算机上. 即便已经安装,最好将它升级到最新的版本. 你可以通过软件包或者其它安装程序来安装,或者下载源码编译安装. 一.Git安装 1. 在linux上安 ...

  7. 让你不再纠结GitHub:Git起步

    一.关于版本控制 版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统.我们通常仅对保存着软件源代码的文本文件做版本控制,但实际上,你可以对任何类型的文件进行版本控制. 采用版本控制 ...

  8. 1.Git起步-Git的三种状态以及三种工作区域、CVCS与DVCS的区别、Git基本工作流程

    1.Git基础 版本控制系统是一种用于记录一个或多个文件内容变化,以便将来查阅恢复特定版本修订情况的系统. Git是一种分布式版本控制系统(Distributed Version Control Sy ...

  9. git起步

    关于版本控制 什么是版本控制?为什么要版本控制? 版本控制是记录文件内容变化,以便在将来查阅特定版本的系统.有了版本控制,我们就可以将某个文件或是整个项目回退到之前的某个时间段,查看现在和之前相比项目 ...

  10. Git学习1:Git起步

    本系列文章部分原理和命令相关内容是从 https://git-scm.com/book/zh/v2 摘录,软件实际使用是总结自己的实践经验成文. 1. 关于版本控制 版本控制是一种记录一个或若干文件内 ...

随机推荐

  1. Java学习笔记--字符串和文件IO

    1.Java中的字符串类和字符的表示 2.区分String,StringBuilder和StringBuffer 3.从命令行中给main方法传递参数 4.文件操作 1 Java中的字符串和字符 1. ...

  2. Java的Map和Object之间的相互转换方法

    public staic Map<String, Object> objectToMap(Object obj) throws Exception { if(obj == null) re ...

  3. Django之model基础(增删改查)

    一.ORM 映射关系 表名 <-------> 类名 字段 <-------> 属性 表记录 <------->类实例对象二.创建表(建立模型) 在创建表之前的准备 ...

  4. 如何查看win10已激活密钥?查看win10已激活完整密钥的方法!

    如何查看win10已激活密钥?查看win10已激活完整密钥的方法! HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/So ...

  5. 【转/TCP协议编程】 基于TCP的Socket 编程

    基于TCP(面向连接)的socket编程,分为客户端和服务器端. 客户端的流程如下: (1)创建套接字(socket) (2)向服务器发出连接请求(connect) (3)和服务器端进行通信(send ...

  6. uvm_regex——DPI在UVM中的实现(三)

    UVM的正则表达是在uvm_regex.cc 和uvm_regex.svh 中实现的,uvm_regex.svh实现UVM的正则表达式的源代码如下: `ifndef UVM_REGEX_NO_DPI ...

  7. Centos install ICU, INTL for php

    1. Install ICU from source wget http://download.icu-project.org/files/icu4c/56.1/icu4c-56_1-src.tgz ...

  8. Aizu 0033 Ball(dfs,贪心)

    日文题面...题意:是把一连串的有编号的球往左或者往右边放.问能不能两边都升序. 记录左边和右边最上面的球编号大小,没有就-1,dfs往能放的上面放. #include<bits/stdc++. ...

  9. 倍增LCA

    前言 在做树上问题时,我们经常会遇到 \(LCA\)(最近公共祖先)问题.曾经的我遇到这类问题只会\(O(n)\)暴力求解,学了倍增\(LCA\),就可以\(O(logn)\)解决了. 简介 倍增\( ...

  10. 【BZOJ4196】[NOI2015] 软件包管理器(树链剖分)

    点此看题面 大致题意: 有\(n\)个软件包,它们的依赖关系形成一棵树.现在,问你安装或卸载一个软件包,会影响多少个软件包的安装状态. 树链剖分 这道题应该是 树链剖分 算法比较入门的题目吧. 对于安 ...