关于Git我们不得不知道的事(一)
一.什么是Git?
Git是目前世界上最先进的分布式版本控制系统(没有之一)。
Git可以协助我们很方便的管理我们的项目,我们随时可以找回(或者回到)我们之前任何一个时刻的项目;还可以让同事或者开发小组成员一同开发;是不是很方便!
二.Git的使用方法
安装Git(这些在官网教程写的很清楚就不啰嗦再写一遍了)
获取Git仓库
有两种取得 Git 项目仓库的方法。 第一种是在现有项目或目录下导入所有文件到 Git 中; 第二种是从一个服务器克隆一个现有的 Git 仓库。
1,进入想管理的项目目录,执行下面命令:
$ git init
你将看到一个.git结尾的子目录
2,执行下面代码开始跟踪文件并且提交(git add 后面加文件名 执行后表示你要指定哪些文件被跟踪并提交)
$ git add *.c
$ git add LICENSE
$ git commit -m 'initial project version'
克隆现有仓库
1,克隆仓库的命令格式是 git clone +(仓库地址)注意⚠️下面代码不要直接复制
$ git clone https://github.com/libgit2/libgit2
2, 你想在克隆远程仓库的时候,自定义本地仓库的名字下面的命令 git clone +(仓库地址)+(自定义仓库名字)注意⚠️下面代码不要直接复制
$ git clone https://github.com/libgit2/libgit2 mylibgit
检查当前仓库文件状态
1,要查看哪些文件处于什么状态,可以用 git status 命令
$ git status
On branch master
nothing to commit, working directory clean
2,我们在项目下创建一个新的 README 文件
$ echo 'My Project' > README$ git statusOn branch masterUntracked files:(use "git add <file>..." to include in what will be committed)
    README
nothing added to commit but untracked files present (use "git add" to track)
在状态报告中可以看到新建的 README 文件出现在 Untracked files 下面(表示未跟踪的文件)
跟踪新文件
1,用命令 git add 开始跟踪一个文件。 所以,要跟踪 README 文件 执行下面的命令
$ git add README此时再运行git status命令,会看到 README 文件已被跟踪,
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
    new file:   README
git add 命令使用文件或目录的路径作为参数;如果参数是目录的路径,该命令将递归地跟踪该目录下的所有文件。
如何暂存已修改文件
1,首先你得将一个文件跟踪 也就是 git add + (文件名) ;然后试着将此文件修改;最后运行 git status 命令,你会看到
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
    new file:   README
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)
    modified:   CONTRIBUTING.md
⚠️这里你会有点看不懂:因为CONTRIBUTING.md文件哪来的?
  它是通过echo “My Project” > CONTRIBUTING.md 先创建好,然后再用了 git add CONTRIBUTING.md 命令跟踪文件,再修改文件内容,这样就会再modified栏(说明已跟踪文件的内容发生了变化,但还没有放到暂存区)暂存了,然后记得要看到以上反馈要 git status
vim CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
    new file:   README
    modified:   CONTRIBUTING.md
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)
    modified:   CONTRIBUTING.md
现在CONTRIBUTING.md同时出现在暂存区和非暂存区,怎么会是  如果你现在提交,CONTRIBUTING.md 的版本是你最后一次运行 git add 命令时的那个版本,而不是你运行 git commit 时,在工作目录中的当前版本。 所以,运行了 git add 之后又作了修订的文件,需要重新运行 git add 把最新版本重新暂存起来
$ git add CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
    new file:   README
    modified:   CONTRIBUTING.md
状态简览
1,使用 git status -s 命令或 git status --short 命令,你将得到一种更为紧凑的格式输出。
$ git status -s
 M README
MM Rakefile
A  lib/git.rb
M  lib/simplegit.rb
?? LICENSE.txt
??表示新添加为跟随文件
A 新添加到暂存文件
M 有两个出现的位置:1,出现在右边表示该文件被修改了但还没有放入暂存区 2,左边表示该文件被修改并放入暂存区
忽略文件
一般我们总会有些文件无需纳入 Git 的管理
方法:
我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。 来看一个实际的例子:
$ cat .gitignore
*.[oa]
*~
.o 或 .a 结尾的文件。 第二行告诉 Git 忽略所有以波浪符(~)结尾的文件, 此外,你可能还需要忽略 log,tmp 或者 pid 目录,以及自动生成的文档等等。 要养成一开始就设置好 .gitignore 文件的习惯,以免将来误提交这类无用的文件。文件 .gitignore 的格式规范如下:
所有空行或者以
#开头的行都会被 Git 忽略。可以使用标准的 glob 模式匹配。
匹配模式可以以(
/)开头防止递归。匹配模式可以以(
/)结尾指定目录。要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(
!)取反。
查看已暂存和未暂存的修改
git diff 命令
提交更新
现在的暂存区域已经准备妥当可以提交了。 在此之前,请一定要确认还有什么修改过的或新建的文件还没有 git add 过,否则提交的时候不会记录这些还没暂存起来的变化。 这些修改过的文件只保留在本地磁盘。 所以,每次准备提交前,先用 git status 看下,是不是都已暂存起来了, 然后再运行提交命令 git commit:
$ git commit
这种方式会启动文本编辑器以便输入本次提交的说明。 (默认会启用 shell 的环境变量 $EDITOR 所指定的软件,一般都是 vim 或 emacs。当然也可以使用 git config --global core.editor 命令设定你喜欢的编辑软件。)
编辑器会显示类似下面的文本信息(本例选用 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:
#	new file:   README
#	modified:   CONTRIBUTING.md
#
~
~
~
".git/COMMIT_EDITMSG" 9L, 283C
好,现在你已经创建了第一个提交!可以看到,提交后它会告诉你,当前是在哪个分支(master)提交的,本次提交的完整 SHA-1 校验和是什么(463dc4f),以及在本次提交中,有多少文件修订过,多少行添加和删改过。
$ git commit -m "Story 182: Fix benchmarks for speed"
[master 463dc4f] Story 182: Fix benchmarks for speed
 2 files changed, 2 insertions(+)
 create mode 100644 README
跳过使用暂存区域
给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤:
移除文件
1,移除文件。
git rm + (文件名)
2,当你忘记添加 .gitignore文件,不小心把一个很大的日志文件或一堆 .a 这样的编译生成文件添加到暂存区时,这一做法尤其有用。 为达到这一目的,使用 --cached 选项:
$ git rm --cached + (文件名)
git rm 命令后面可以列出文件或者目录的名字,也可以使用 glob 模式。 比方说:
$ git rm log/\*.log
注意到星号 * 之前的反斜杠 \, 因为 Git 有它自己的文件模式扩展匹配方式,所以我们不用 shell 来帮忙展开。 此命令删除 log/ 目录下扩展名为 .log 的所有文件。 类似的比如:
$ git rm \*~
该命令为删除以 ~ 结尾的所有文件。
移动文件
要在 Git 中对文件改名,可以这么做:
$ git mv + (旧文件名) + (新文件名)
它会恰如预期般正常工作。 实际上,即便此时查看状态信息,也会明白无误地看到关于重命名操作的说明:
$ git mv README.md README
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
    renamed:    README.md -> README
其实,运行 git mv 就相当于运行了下面三条命令:
$ mv README.md README
$ git rm README.md
$ git add README
《《 未完待续 》》
关于Git我们不得不知道的事(一)的更多相关文章
- ES6 你可能不知道的事 – 基础篇
		
序 ES6,或许应该叫 ES2015(2015 年 6 月正式发布),对于大多数前端同学都不陌生. 首先这篇文章不是工具书,不会去过多谈概念,而是想聊聊关于每个特性 你可能不知道的事,希望能为各位同学 ...
 - Java你可能不知道的事(3)HashMap
		
概述 HashMap对于做Java的小伙伴来说太熟悉了.估计你们每天都在使用它.它为什么叫做HashMap?它的内部是怎么实现的呢?为什么我们使用的时候很多情况都是用String作为它的key呢?带着 ...
 - java你可能不知道的事(2)--堆和栈
		
在java语言的学习和使用当中你可能已经了解或者知道堆和栈,但是你可能没有完全的理解它们.今天我们就一起来学习堆.栈的特点以及它们的区别.认识了这个之后,你可能对java有更深的理解. Java堆内存 ...
 - overflow:hidden 你所不知道的事
		
overflow:hidden 你所不知道的事 overflow:hidden这个CSS样式是大家常用到的CSS样式,但是大多数人对这个样式的理解仅仅局限于隐藏溢出,而对于清除浮动这个含义不是很了解. ...
 - Spring中你可能不知道的事(一)
		
Spring作为Java的王牌开源项目,相信大家都用过,但是可能大家仅仅用到了Spring最常用的功能,Spring实在是庞大了,很多功能可能一辈子都不会用到,今天我就罗列下Spring中你可能不知道 ...
 - java你可能不知道的事(2)--堆和栈<转>
		
在java语言的学习和使用当中你可能已经了解或者知道堆和栈,但是你可能没有完全的理解它们.今天我们就一起来学习堆.栈的特点以及它们的区别.认识了这个之后,你可能对java有更深的理解. Java堆内存 ...
 - SSH Config 那些你所知道和不知道的事 (转)
		
原文地址:https://deepzz.com/post/how-to-setup-ssh-config.html SSH(Secure Shell)是什么?是一项创建在应用层和传输层基础上的安全协议 ...
 - Java你可能不知道的事系列(1)
		
概述 本类文章会不段更新分析学习到的经典面试题目,在此记录下来便于自己理解.如果有不对的地方还请各位观众拍砖. 今天主要分享一下常用的字符串的几个题目,相信学习java的小伙伴们对String类是再熟 ...
 - Java你可能不知道的事系列1
		
概述 本类文章会不段更新分析学习到的经典面试题目,在此记录下来便于自己理解.如果有不对的地方还请各位观众拍砖. 今天主要分享一下常用的字符串的几个题目,相信学习java的小伙伴们对String类是再熟 ...
 
随机推荐
- C++ 随笔练习
			
//例题:求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字,为2. 例如,n=5时=2+22+222+2222+22222,n由键盘输入.//题目来源:https://ww ...
 - vue基础----key的作用
			
1.key 在虚拟dom中 标记不同的结构,for循环中需要添加上 <body> <div id="app"> <div v-if="fla ...
 - 一文搞懂 Elasticsearch 之 Mapping
			
这篇文章主要介绍 Mapping.Dynamic Mapping 以及 ElasticSearch 是如何自动判断字段的类型,同时介绍 Mapping 的相关参数设置. 首先来看下什么是 Mappin ...
 - 什么是yarn,如何使用yarn安装项目依赖
			
一.yarn的简介: Yarn是facebook发布的一款取代npm的包管理工具. 二.yarn的特点: 1.速度超快. Yarn 缓存了每个下载过的包,所以再次使用时无需重复下载. 同时利用并行下载 ...
 - Java 锁详解(转)
			
转自 https://www.cnblogs.com/jyroy/p/11365935.html Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率.本文旨在对锁相 ...
 - oracle中plsql练习题-----编写一个PL/SQL块,输出所有员工的员工姓名、员工号、工资和部门号
			
一.思路:首先输出需要变量接收,需要声明变量,于是考虑什么变量类型比较合适,在这我用的是table类型,最后,查询出来,循环输出即可. 二.具体实现 -- 编写一个PL/SQL块,输出所有员工的员工姓 ...
 - 在ASP.NET MVC中如何预防Cookie的窃取攻击(转载)
			
Cookie Cookie is a small piece of data sent by a web server to a web browser. The browser stores thi ...
 - git 使用和一些错误
			
一.简单使用 Git是目前世界上最先进的分布式版本控制系统,用于自动记录每次文件的改动,但是和所有版本控制系统一样,只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等,而图片.视频这些二进 ...
 - PyCharm导入selenium的webdirver模块出错
			
selenium安装好后准备验证一下,导入的webdriver有红色标识,检查了浏览器驱动的.环境变量仍然没有解决问题. 后来在百度找到了原因:项目没安装selenium Interpreter 打开 ...
 - The import org.springframework cannot be resolved
			
刚开始学spring框架时import org.springframework.context.support.ClassPathXmlApplicationContext;报错 我建的是maven项 ...