1、创建新仓库  

 
 git init  
 touch  test.txt
 git add --a
 git commit -m "fist commit"
 
 初始化新仓库,在当前目录下由一个.git的目录,所有git需要的数据和资源都放在这个目录中,在当面目录下添加文件后,需要通过git add 添加到文件追踪管理(添加到暂存区,数据存放在.git/index 目录索引,数据内部保存在.git/objects 中), git commit -m "提交说明备注" 提交的信息会提交到数据仓库,数据提交到正式仓库,具体保存在.git/objects 中,如以上提交会包含一个commit,tree ,blob 对象。
 
2、从现有仓库克隆
 
git clone  url
 
git clone git@github.com:torvalds/linux.git 
 
如从gitHub上克隆一份linux的源码,不仅是克隆最新版本的源码,还克隆了所有数据仓库的历史版本,每个文件的每一个版本,这个时候及时服务器github 发生故障,可以用本地数据仓库重建服务器上的仓库。可以回复到从服务器克隆或最后更一次从服务器拉去的状态。在.git 目录中,已经保存了所有版本记录,本地文件夹即工作目录的所有文件删除了,然后从中取出最新版本的文件拷贝。
 
3、检查文件更新状态
   
    要求确定当前工作区和暂存区文件的状态,可以通过git status 命令。在工作区和暂存区的目录状态可以查看。
 
  git status
 
 On branch master  nothing to commit, working directory clean
 
当前在默认master 分支,当前工作目录和暂存区没有任何跟踪的文件,也没有任何文件提交后更改,也没有新增加,未被跟踪的文件。
 
notepad test.txt
notepad t.txt
 
修改test.txt文件,新添加一个t.txt 文件,查看当前文件状态。
 
$ git status
# On branch 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 di
#
#       modified:   test.txt
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       t.txt
no changes added to commit (use "git add" and/or "git commit -a")
 
新增加的文件t.txt 在未跟踪文件范围Untracked files 范围,需要通过git add 把改文件添加的暂存区,归入的版本跟踪管理。
 
4、 添加文件到暂存区
 
$ git add .
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   h.txt
#       new file:  test.txt
 
git add . 把当前所有目录文件所有新文件和修改文件添加到暂存区,如果test.txt 文件提示是 Changes not staged for commit ,说明此跟踪文件已经发生修改,但是还未添加到暂存区,把修改的文件通过git add 命令添加到暂存区后。提示Changes to be committed. 文件已经暂存,随时可以提交到仓库 。h.txt 新添加文件从未跟踪状态Untracked files ,通过git add命令添加到暂存区,已加入跟踪文件的范围。
 
5、版本提交
 
$ git commit -m "this is test commit"
[master d4a498a] this is test commit
    git commit --amend --reset-author

2 files changed, 3 insertions(+)
create mode 100644 t.txt

 
通过git commit -m "xxx" 将当前暂存区的内容提交到仓库,本次commit 提交文件是在默认master分支,提交commit 对象存放在.git/objects 的d4/1498a... 的文件中,该文件指向一个树tree对象。
 
6、查看当前提交日志记录
 
$ git log
commit d4a498a197c24421acee5c5ff96cfbc7e5c3be9e
Author: andy<andy@gmail.com>
Date:   Sat Mar 8 14:23:37 2014 +0800

this is test commit

commit 80071e48614361dc282473d6482e3faa9fec17d9
Author:andy<andy@gmail.com>
Date:   Sat Mar 8 13:35:13 2014 +0800

1st commit

 
git log 命令查看当前版本
 
7、文件差异比较
 
 工作区和暂存区文件比较用git diff 命令,暂存区和最近一天提交版本之间的差异,可以用git diff --cached/staged. 如下:
  目前在test.txt 文件只有1111111 文件内容,我在文件test.txt中添加22222222等内容,比较当前暂存区和工作文件差异
 
$ notepad test.txt
 
$ git diff
diff --git a/test.txt b/test.txt
index 0147537..f33d264 100644
--- a/test.txt
+++ b/test.txt
@@ -1,3 +1,4 @@
11111111111111
+22222222222222
 
$ git status
# On branch 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 d
#
#       modified:   test.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
 
$ git diff --staged
 
可以发现工作区比暂存区test.txt文件多增加了22222222222222 内容。暂存区和数据仓库内容是完全相同的。同时看看当前工作区状态。现在我们吧刚刚修改的内容添加到暂存区,同时比较暂存区和数据仓库文件差异。
 
$ git add test.txt
 
$ git diff
 
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   test.txt
#
 
把工作区修改的内容更新到暂存区后,可以看出此时暂存区和工作区文件完全相同。状态是是已暂存,带提交状态。与此同时,我们可以比较暂存区和数据残酷之间的差异和比较。
 
$ git diff --staged
diff --git a/test.txt b/test.txt
index 0147537..f33d264 100644
--- a/test.txt
+++ b/test.txt
@@ -1,3 +1,4 @@
11111111111111
+22222222222222
 
我们可以很清楚的看到当前暂存区和数据仓库版本比较。暂存区test.txt 内容比最近一次提交内容多22222222222222 一行数据。提交数据到数据仓库。我们现在可以把工作区目录和数据仓库比较,看看test.txt 直接的文件内容差异。
 
$ git diff head
diff --git a/test.txt b/test.txt
index 0147537..f33d264 100644
--- a/test.txt
+++ b/test.txt
@@ -1,3 +1,4 @@
11111111111111
+22222222222222
 
可以很立即看出工作区文件内容比较仓库有新修改的内容。此时我们提交更新所有文件都没有差异了。看看文件差异。
 
$ git commit -m "test git diff "
[master fc0166f] test git diff
Committer: andy<andy@gmail.com>

git commit --amend --reset-author

1 file changed, 1 insertion(+)

 
$ git diff
$ git diff --staged
$ git diff head
 
8、文件删除和移动
 
所有的工作区rm xxx删除后,可以直接从数据仓库获取最近一次提交版本的内容 git rm xxx。直接从数据仓库删除此文件内容。
 
$ ls
h.txt  test.txt
$ rm h.txt

$ ls
test.txt

$ git diff
diff --git a/h.txt b/h.txt
deleted file mode 100644
index 456f979..0000000
--- a/h.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-welcome to here
-very good

 
可以通过文某比较当前的工作目录h.txt 文件已经被删除了,工作区目录和暂存区比较文件差异也可以返现文件删除模式。接下来删除暂存区目录
 
$ git diff --staged

$ git rm h.txt
rm 'h.txt'

$ git diff --staged
diff --git a/h.txt b/h.txt
deleted file mode 100644
index 456f979..0000000
--- a/h.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-welcome to here
-very good
-
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       deleted:    h.txt
#
 
通过删除暂存区文件前后可以比较出文件的差异。此时文件也不在跟踪状态。还有我们仅仅希望删除暂存区的内容,不删除工作区的内容
git rm --cached -f h.txt  的方式来实现,特别是针对工作区有修改,要删除暂存区内容。
 
 
$ git reset --hard
HEAD is now at fc0166f test git diff

$ ls
h.txt  test.txt

 
$ git rm --cached h.txt
rm 'h.txt'

$ git diff

$ git diff head
diff --git a/h.txt b/h.txt
deleted file mode 100644
index 456f979..0000000
--- a/h.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-welcome to here
-very good
-
$ git diff -cached
error: invalid option: -cached

$ git diff --cached h.txt
diff --git a/h.txt b/h.txt
deleted file mode 100644
index 456f979..0000000
--- a/h.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-welcome to here
-very good

 
移动
git 移动文件操作是是相对先移动复制一个新文件,删除原文件,添加新文件到跟踪范围。
 
$ ls
h.txt  test.txt

$ git mv h.txt d.txt   结果是等同于,相当于以下三条命令

$ ls
d.txt  test.txt

$ mv d.txt to.txt

$ git rm d.txt
rm 'd.txt'

$ git add to.txt

 
 
9、查看提交历史
 
$ git log
commit fc0166f53a45cfc4c17079e5e3454fb7e3136cb6
Author: andy<andy@gmail.com>
Date:   Sat Mar 8 15:52:10 2014 +0800

test git diff

commit d6eab3a38aee0b25ac395899c82edd48723a2ea9

Author: andy<andy@gmail.com>

Date:   Sat Mar 8 15:36:53 2014 +0800

enforce commit'

commit 85ec024140442df6db8625a07c2ee7369cceb704

Author: andy<andy@gmail.com>

Date:   Sat Mar 8 15:35:44 2014 +0800

com 3

 
 
git log  查看提交历史,git log -p -n  最近n 次提交的内能和差异。查看历史记录统计信息 git log --stat,查看提交的历史记录格式可自由选择。
 
$ git log --pretty=format:"%h - %an, %ar : %s"
fc0166f - yyf, 48 minutes ago : test git diff
d6eab3a - yyf, 63 minutes ago : enforce commit'
85ec024 - yyf, 65 minutes ago : com 3
d4a498a - unknown, 2 hours ago : this is test commit
80071e4 - unknown, 3 hours ago : 1st commit
 
列出了常用的格式占位符写法及其代表的意义。
选项   说明
%H  提交对象(commit)的完整哈希字串
%h  提交对象的简短哈希字串
%T  树对象(tree)的完整哈希字串
%t  树对象的简短哈希字串
%P  父对象(parent)的完整哈希字串
%p  父对象的简短哈希字串
%an 作者(author)的名字
%ae 作者的电子邮件地址
%ad 作者修订日期(可以用 -date= 选项定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者(committer)的名字
%ce 提交者的电子邮件地址
%cd 提交日期
%cr 提交日期,按多久以前的方式显示
%s  提交说明
 
$ git log --pretty=format:"%h %s" --graph
* 78d907a dev branch commit
* fc0166f test git diff
* d6eab3a enforce commit'
* 85ec024 com 3
* d4a498a this is test commit
* 80071e4 1st commit
 
 
选项 说明
-p 按补丁格式显示每个更新之间的差异。
--stat 显示每次更新的文件修改统计信息。
--shortstat 只显示 --stat 中最后的行数修改添加移除统计。
--name-only 仅在提交信息后显示已修改的文件清单。
--name-status 显示新增、修改、删除的文件清单。
--abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
--relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。
--graph 显示 ASCII 图形表示的分支合并历史。
--pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)
 
 
10、撤销操作
 
可以修改最后一次提交的内容,当你发现最近一次提交内容不正确时候,可以通过  git commit --amend 修改
 
$ git commit --amend -m "modify commit"
[master c660522] modify commit
 
$ git log --oneline
c660522 modify commit
fc0166f test git diff
d6eab3a enforce commit'
85ec024 com 3
d4a498a this is test commit
80071e4 1st commit
 
 
11、取消文件修改
 
git reset    | git reset head    将head指向的目录树重置的暂存区
 
git  reset  --soft  head^          工作区和暂存区不变,但是引用向前回退一次,当对最新提交不满意的时候,撤销最新提交以便更改
git commit -e -F  .git/COMMIT_EDITMSG    以上两个命令相当于git commit --amend
 
git reset  head^
git reset --mixed  head^   暂存区和引用回退到上一次提交之前
git reset --hard head^      引用 工作区 暂存区 彻底消除

git 入门二 (基础)的更多相关文章

  1. GIT之二 基础篇(1)

    GIT基础 取得项目的 Git 仓库 有两种取得 Git 项目仓库的方法.第一种是在现存的目录下,通过导入所有文件来创建新的 Git 仓库.第二种是从已有的 Git 仓库克隆出一个新的镜像仓库来. 在 ...

  2. GIT之二 基础篇(2)

    远程仓库的使用 要参与任何一个 Git 项目的协作,必须要了解该如何管理远程仓库.远程仓库是指托管在网络上的项目仓库,可能会有好多个,其中有些你只能读,另外有些可以写.同他人协作开发某个项目时,需要管 ...

  3. git入门学习(二):新建分支/上传代码/删除分支

    一.git新建分支,上传代码到新的不同分支  我要实现的效果,即是多个内容的平行分支:这样做的主要目的是方便统一管理属于同一个内容的不同的项目,互不干扰.如图所示: 前提是我的github上已经有we ...

  4. Swift语法基础入门二(数组, 字典, 字符串)

    Swift语法基础入门二(数组, 字典, 字符串) 数组(有序数据的集) *格式 : [] / Int / Array() let 不可变数组 var 可变数组 注意: 不需要改变集合的时候创建不可变 ...

  5. Qt入门之基础篇 ( 二 ) :Qt项目建立、编译、运行和发布过程解析

    转载请注明出处:CN_Simo. 题解: 本篇内容主讲Qt应用从创建到发布的整个过程,旨在帮助读者能够快速走进Qt的世界. 本来计划是讲解Qt源码静态编译,如此的话读者可能并不能清楚地知道为何要静态编 ...

  6. IM开发者的零基础通信技术入门(二):通信交换技术的百年发展史(下)

    1.系列文章引言 1.1 适合谁来阅读? 本系列文章尽量使用最浅显易懂的文字.图片来组织内容,力求通信技术零基础的人群也能看懂.但个人建议,至少稍微了解过网络通信方面的知识后再看,会更有收获.如果您大 ...

  7. Git入门基础详情教程

    前言 写了一篇文章<一篇文章了解Github和Git教程>还觉得不错,继续写了<为了Github默默付出,我想了解你>,那么继续写Git 基础知识. Git 官网:https: ...

  8. 2.Python爬虫入门二之爬虫基础了解

    1.什么是爬虫 爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来.想抓取什么?这个由你来控制它咯. ...

  9. Python爬虫入门二之爬虫基础了解

    1.什么是爬虫 爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来.想抓取什么?这个由你来控制它咯. ...

随机推荐

  1. Python学习笔记——对象

    Python 的对象定义方式如下: class Person:        def __init__(self, name):            self.name = name         ...

  2. C# 委托、事件,lamda表达式

    参考文章 1. 委托Delegate C#中的Delegate对应于C中的指针,但是又有所不同C中的指针既可以指向方法,又可以指向变量,并且可以进行类型转换, C中的指针实际上就是内存地址变量,他是可 ...

  3. 脑科学对基金经理的八个启示 z

    脑科学对基金经理的八个启示 第一,总想要更多.人类大脑是在物资奇缺过程中进化的,所以获得任何“资源”,如食物.性.金钱等,都可以让人感觉良好,大脑也会鼓励我们继续下去. 事实上,可卡因等药物就是“绑架 ...

  4. Unity进阶技巧 - 使用MonoDevelop来断点调试

    前言 断点调试在编程调试过程中是一项非常重要的功能,而Unity自带的脚本编辑器MonoDevelop需要进行一些设置才能使用断点调试的功能,今天我们就来看看如何使用MonoDevelop进行断点调试 ...

  5. SilverLight-3:目录

    ylbtech-SilverLight-Index: 1.A,返回顶部 Layout The Layout Containers - The Panel Background Borders   Si ...

  6. Playonlinux

    apt-get install playonlinux -y apt-get install winbind -y apt-get install unzip -y 开始中搜索:playonlinux ...

  7. python常见的编程错误

    常见的编程错误 2.1 试图访问一个未赋值的变量,会产生运行时错误. 2.2 ==,!=, >=和<=这几个运算符的两个符号之间出现空格,会造成语法错误. 2.3 !=,<>, ...

  8. python 读取CSV文件 中文乱码

    今天读取一个CSV文件,打印出来,中文显示乱码,原因是编码的缘故,CSV保存是编码格式ANSI,解决办法是以记事本方式打开CSV文件,然后另存为时编码选择UTF-8进行保存即可.

  9. 【PA2012】【BZOJ4289】Tax

    Description 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值.求从起点1到点N的最小代价. 起点的代价是离开起点的边的边权.终点的代价是进入终点的边的 ...

  10. ElasticSearch获取指定Field数据的Java方法

    ElasticSearch(ES)检索后需要结果时,可能通过source接口读出.但是这样的话,返回的结果会很多.在调用search方法时,我们可以添加addfield或addfields方法,仅仅读 ...