1 $ git init

对当前所在目录进行git 管理 在当前目录初始化新仓库

2 $ git clone <url> <position>

从url克隆一个仓库到postion处,如下

$ git clone git://github.com/schacon/grit.git

这会在当前目录下创建一个grit的目录,其中包含一个.git的目录,用于保存下载下来的所有的版本记录,然后从其中抽取出最新版本的文件进行拷贝。如果进入这个新见的grit目录,你会看到小木中所有的文件已经在里面了,准备好后续的开发使用。

你也可以指定项目目录的名称,使用position参数如下

$ git clone git://github.com/schacon/grit.git mygrit

差别是,原来的grit变成了mygrit,其他的与上面一致。

ps git中支持多中数据传输协议,上文使用git://协议,不过也支持http(s)://协议或者 user@server:/path.git所表示的ssh协议。

3 git status 查看当前仓库文件状态

baidudeMacBook-Pro-3:sijianing sijianing$ pwd
/Users/sijianing/sijianing
baidudeMacBook-Pro-3:sijianing sijianing$ touch newFile
baidudeMacBook-Pro-3:sijianing sijianing$ git status
位于分支 master
您的分支与上游分支 'origin/master' 一致。 要提交的变更:
(使用 "git reset HEAD <文件>..." 以取消暂存) 新文件: README
修改: pom.xml
重命名: src/main/java/com/baidu/personal-code/App.java -> src/main/java/com/baidu/personal/code/App.java
重命名: src/test/java/com/baidu/personal-code/AppTest.java -> src/test/java/com/baidu/personal/code/AppTest.java 尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动) 修改: README 未跟踪的文件:
(使用 "git add <文件>..." 以包含要提交的内容) newFile

第一行(On branch master) 表示所属分支

第二部分 要提交的变更(Changes to be committed)

表示已经纳入git 版本控制 且修改已经被暂存但未提交(执行过git add 但未 git commit)

第三部分 尚未暂存以备提交的变更(Changes not staged for commit)

表示已经跟踪文件内容的变化(纳入版本控制)但是还没有放到暂存区(后文介绍的 git add可以将文件纳入暂存区)

第四部分 未跟踪的文件(Untracked files)

未跟踪的文件意味着Git在之前的快照提交中没有这些文件,git也不会将之自动纳入跟踪管理范围内,除非你明确的git add了这个文件,可以看到,这个newFile 文件是我们刚刚创建的。

4 $ git add

使用此命令跟踪一个新文件。

baidudeMacBook-Pro-3:sijianing sijianing$ git add newFile
baidudeMacBook-Pro-3:sijianing sijianing$ git status
位于分支 master
您的分支与上游分支 'origin/master' 一致。 要提交的变更:
(使用 "git reset HEAD <文件>..." 以取消暂存) 新文件: README
新文件: newFile
修改: pom.xml
重命名: src/main/java/com/baidu/personal-code/App.java -> src/main/java/com/baidu/personal/code/App.java
重命名: src/test/java/com/baidu/personal-code/AppTest.java -> src/test/java/com/baidu/personal/code/AppTest.java 尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动) 修改: README

可以看到,对新文件newFile执行add操作后 newFile进入了暂存区,下面尝试对newFile进行修改

baidudeMacBook-Pro-3:sijianing sijianing$ echo "123" >> newFile
baidudeMacBook-Pro-3:sijianing sijianing$ git status
位于分支 master
您的分支与上游分支 'origin/master' 一致。 要提交的变更:
(使用 "git reset HEAD <文件>..." 以取消暂存) 新文件: README
新文件: newFile
修改: pom.xml
重命名: src/main/java/com/baidu/personal-code/App.java -> src/main/java/com/baidu/personal/code/App.java
重命名: src/test/java/com/baidu/personal-code/AppTest.java -> src/test/java/com/baidu/personal/code/AppTest.java 尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动) 修改: README
修改: newFile

可以发现 暂存待提交区和未暂存区同时出现了两个newFile,实际上git保存了你上次add newFile时newFile的版本,而文件系统中保存的是修改过的newFile版本,如果你再次运行git add那么就会以修改过的版本为准。

baidudeMacBook-Pro-3:sijianing sijianing$ git add newFile
baidudeMacBook-Pro-3:sijianing sijianing$ git status
位于分支 master
您的分支与上游分支 'origin/master' 一致。 要提交的变更:
(使用 "git reset HEAD <文件>..." 以取消暂存) 新文件: README
新文件: newFile
修改: pom.xml
重命名: src/main/java/com/baidu/personal-code/App.java -> src/main/java/com/baidu/personal/code/App.java
重命名: src/test/java/com/baidu/personal-code/AppTest.java -> src/test/java/com/baidu/personal/code/AppTest.java 尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动) 修改: README

5 .gitignore

一般我们会有些文件无需纳入git管理,我们可以创建一个名为.gitignore的文件,列出列出忽略的文件模式(正则表达式)

# 此为注释 – 将被 Git 忽略
# 忽略所有 .a 结尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
/TODO
# 忽略 build/ 目录下的所有文件
build/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录下所有扩展名为 txt 的文件
doc/**/*.txt

其中规范如下

  • 所有空行或者#开头的行都会被git忽略
  • 使用标准的glob模式匹配
    • 指shell简化了的正则表达式,*匹配一个或者多个任意字符;[abc]表示匹配一个在方括号内的字符;?表示匹配任意一个字符;方括号内的"-"表示范围(比如[0-9])。
  • 匹配模式最后跟斜杠/表示说明要忽略的是目录
  • 要忽略指定模式以外的文件或目录,可以在前面加上!或^取反

6 git diff

查看已经暂存和未暂存的更新,不加参数直接输入git diff

baidudeMacBook-Pro-3:sijianing sijianing$ git diff
diff --git a/README b/README
index 190a180..4ca9456 100644
--- a/README
+++ b/README
@@ -1 +1,2 @@
123
+123
#此命令比较的是文件系统中当前文件和上次add的快照之间的差异,也就是修改之后还没有暂存的变化。

如果要查看已经暂存的文件和上次提交的差异 加参数 --staged

7 git commit 提交更新

默认的 git commit命令会启动文本编辑器来输入本次提交的说明。

for exercise
# 请为您的变更输入提交说明。以 '#' 开始的行将被忽略,而一个空的提交
# 说明将会终止提交。
#
# 位于分支 master
# 您的分支领先 'origin/master' 共 1 个提交。
# (使用 "git push" 来发布您的本地提交)
#
# 要提交的变更:
# 修改: newFile
#
# 尚未暂存以备提交的变更:
# 修改: README
#

默认的提交信息包含git status的信息但放在注释行里,另外开头有一个空行,可以输入说明。这些注释行完全可以去掉,但是加上之后有助于回忆起这次更新的内容。

另外,也可以使用-m参数提交说明

baidudeMacBook-Pro-3:sijianing sijianing$ git commit -m "for exercise"
[master 24fd388] for exercise
5 files changed, 14 insertions(+), 2 deletions(-)
create mode 100644 README
create mode 100644 newFile
rename src/main/java/com/baidu/{personal-code => personal/code}/App.java (87%)
rename src/test/java/com/baidu/{personal-code => personal/code}/AppTest.java (95%)

当前是在master分支提交,本次提交的完整SHA-1校验和是24fd388,以及本次提交中,多少文件修改过,多少行添加过,删除过。

PS:commit 的是本地已经add过的,没有add的快照不会提交

8 git commit -a 跳过使用暂存区域直接提交

使用暂存区域管理可以管理提交的谢姐,但有时候略显繁琐,git commit -a选项 git会自动把所有跟踪过的文件add一遍 然后一起提交

9 git rm 移除文件

要从git 中移除某个文件,需要从已跟踪文件清单中清除,且要从暂存区域移除。执行后对应文件就不再纳入git的版本管理,注意,此操作会一并删除本地文件,如果想保留本地文件用--cached即可。

10 git mv 移动文件

git mv A B 相当于执行一下三条命令

$ mv A B
$ git rm A
$ git add B

https://git-scm.com/book/zh/v1/Git-基础-查看提交历史 明天继续补

git 基本操作小节操作(一) init clone status add 未完,参考链接在末尾的更多相关文章

  1. git知识总结-2.git基本操作之操作汇总

    0.前言 一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. 上图分别为: Workspace:工作区 Index / Stage:暂存区 Reposito ...

  2. iis7 64位 操作excel的一系列问题(未完待续)

    查了半天发现是IIS跑在64位环境下引起的.而64位下,是木有Access数据库的驱动的(包括Excel也不行). 解决办法是:在目标网站的应用程序池中选择高级设置,然后将启用32位应用程序设置为tr ...

  3. asp.net 操作excel的一系列问题(未完待续)

    最近在处理exel的一些东西,遇到了很多问题,现在就在此将问题和网上找到的解决办法 1.外部表不是预期格式错误 错误经过:在读取Excel时,出现外部表不是预期的格式 错误原因1: 由于Excel 9 ...

  4. Git基本操作和GtHub 特殊技巧

    <GitHub 入门与实践> 笔记 了解GitHub Git 和 GitHub 的区别 在Git中,开发者将源代码存入名为"Git仓库"的资料库中,并加以使用.而Git ...

  5. Git-Runoob:Git 基本操作

    ylbtech-Git-Runoob:Git 基本操作 1.返回顶部 1. Git 基本操作 Git 的工作就是创建和保存你项目的快照及与之后的快照进行对比.本章将对有关创建与提交你的项目快照的命令作 ...

  6. git学习 #2:git基本操作

    本文出自   http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...

  7. git版本控制-详细操作

    - git,软件帮助使用者进行版本的管理 阶段一git 命令: git init 初始化 git config --global user.email "you@example.com&qu ...

  8. GIT 的常规操作

    GIT 的常规操作 常规操作也是我自己平时常用的几个命令, 学自于 pro git 这本书中 git 配置文件 git的配置文件位置 针对所有用户:/etc/gitconfig 针对当前用户: -/. ...

  9. Git 常用场景操作

    git init      在本地新建一个repo,进入一个项目目录,执行git init,会初始化一个repo,并在当前文件夹下创建一个.git文件夹.   git clone      获取一个u ...

随机推荐

  1. 剑指offer-面试题38-字符串的排列-全排列

    /* 题目: 输入字符串,打印字符串的所有排列. 输入acc,输出[acc, cac, cca]. */ /* 思路: 将字符串看作两部分,第一个字符串和后面的部分. 将第一个字符串与后面字符串依次交 ...

  2. jquery.datetimepicker中报错Cannot read property 'top' of undefined

    今天在项目里用到一个jQuery的时间插件,一开始自己写的测试demo完全么的问题 但当我把它放到项目里时问题来了,报了一个错:Cannot read property 'top' of undefi ...

  3. 哈夫曼树 动态数组的使用vector

    问题描述 Huffman树在编码中有着广泛的应用.在这里,我们只关心Huffman树的构造过程. 给出一列数{pi}={p0, p1, …, pn-1},用这列数构造Huffman树的过程如下: 1. ...

  4. Python_基础数据类型

    一,首先介绍一下变量 1. 变量是什么 在Python中,变量的概念基本上和初中代数的方程变量是一致的. 2. 变量命名规则 由数字.字母.下划线组成 不能以数字开头 要具有描述性 要区分大小写 禁止 ...

  5. P4883 mzf的考验[平衡树]

    P4883 mzf的考验 维护一种数据结构 支持区间翻转 区间异或 区间求和- 显然 fhq treap 区间异或显然是拆位 ~~然后复杂度*20~~ 第一次先遍历一下整棵树 pushup 一下 就可 ...

  6. jsp+servlet和ajex中遇到的问题

    软件杯的时候,我们的项目需要在手机端运行,由于本身的这个项目我们使用jsp+servlet做的一个项目,所以我们利用ajex,把eclipse作为后台运行tomcat8,,在hbuilder用weba ...

  7. StyleLint 使用指南

    StyleLint 是『一个强大的.现代化的 CSS 检测工具』, 与 ESLint 类似, 是通过定义一系列的编码风格规则帮助我们避免在样式表中出现错误. 安装stylelint npm insta ...

  8. 深入理解Java内存模型中的虚拟机栈

    深入理解Java内存模型中的虚拟机栈 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,这些区域都会有各自的用途,以及创建和销毁的时间,有的区域会随着虚拟机进程的启 ...

  9. 控制input中只能输入固定格式内容

    onkeyup 事件会在键盘按键被松开时发生,onafterpaste 是粘贴触发,没有这个事件用onblur吧,失去焦点时发生输入完,点其他地方就会执行. <html lang="e ...

  10. web做题记录

    2020.1.19 南邮ctf 签到题 题目:key在哪里? 在火狐浏览器中右键选择打开查看源代码,在源代码可以看到如下 因为是第一次做这个题,不知道提交啥,我先提交了“admiaanaaaaaaaa ...