到你想进行版本控制的文件所在的目录下(该目录即是工作区)

查看状态 git status

初始化 git init



添加到暂存区 git add

提交到版本库 git commit -m "注释"

为什么Git添加文件需要两步呢?一步add,一步commit。嘿嘿,因为commit命令可以一次提交多个文件,所以你可以多次使用add命令呢。(相当于在某地集合然后大家一起去网吧开黑,当然你也可以自个去)

然而我们在工作区的文本中添加一行内容

想知道做了哪些修改的话可以使用命令 git diff(仅对已追踪的文件好使)

再次修改文件再次添加

版本回滚

多添加提交几次

用git log命令可以查看最近几次提交的版本。如果你发现内容太多,可以用这个命令查看 git log --pretty=oneline -n(n表示显示几条记录)



在Git中我们用HEAD表示当前版本,也就是我们最新提交的,上一个版本就应该这么表示”HEAD“,再上一个版本就这样表示”HEAD“,当然如果有几十个版本或者1000个版本,我们还要写1000个,这是不可能的,所以哟。我们写成这样HEAD~1000

回退到上一版本git reset --hard HEAD^(慎用,了解详情





想回到某个版本 git reset --hard 版本号(这个会改变工作区,暂存区的数据,慎用,了解详情)



我们在工作区新建一个文本b.txt,再git status查看状态,提示



因为工作区新建的b.txt没有被add到暂存区,git提示我们有一个untracked(未被追踪)的文件。(可以用git add 命令添加到暂存区)

在工作区修改已经git add 过的readme.txt文本,查看状态提示:



changes not staged for commit :意思是readme.txt已经被修改了但还未添加到暂存区

Git会告诉你有你个文件被修改,你有两个选择,一个用 git add 提交到暂存区,另一个是用git checkout可以丢弃工作区的修改。命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销(discard changes(放弃修改)),这里有两种情况:

  • 一种是readme.txt自修改后还没有被放到暂存区,现在撤销修改就回到和版本库一模一样的状态;
  • 另一种是readme.txt已经添加到暂存区后,又作了修改,现在撤销修改就回到添加到暂存区后的状态。

    总之,就是让这个文件回到最近一次git commit或git add时的状态。

当我们把修改的readme.txt和新建的b.txt添加到暂存区的时候



use "git reset HEAD ..." to unstage 意思是git reset HEAD 可以把暂存区中的修改撤消掉,就是你git add

后就后悔了,发现你其实不想添加文件到暂存区,就可以用这个命令,原理是让当前分支对应的内容,覆盖掉暂存区的内容,这样就相当于我们没有提交





大概意思是除了存在未跟踪的文件外,未添加任何提交 ,说明暂存区是空的,告诉我们可以用git add 跟踪文件



這意味著你有一個乾淨的工作目錄——換句話說,已追蹤的檔案沒有被修改; Git 也沒有看到任何未追蹤檔案,否則它們會在這裡被列出來;



b.txt同時被列在已預存「及」未預存。 這怎麼可能? 原來 Git 在你執行 git add 命令時,的確將當時的檔案內容預存起來; 如果你現在提交,最後一次執行 git add 命令時,那個當下的 b.txt 的版本會被提交,而不是在提交時你在工作目錄所看到的檔案版本被提交; 如果你在 git add 後修改檔案,你必需再次執行 git add 預存最新版的檔案:

簡潔的狀態輸出

雖然 git status 輸出內容相當全面,但也相當囉嗦; Git 另外提供一個簡潔輸出的選項,因此你可以以一種較精簡的方式來檢視你的修改; 如果你執行 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 等等。 標記有二個欄位——左邊欄位用來指示「預存區」狀態,右邊欄位則是「工作目錄」狀態。 所以在這個範例中,在工作目錄中的檔案 README 是已修改的,但尚未被預存;而 lib/simplegit.rb 檔案則是已修改且已預存的; Rakefile 則是曾經修改過也預存過,但之後又再次修改,所以總共有二次修改,一個有預存一個沒有。

git diff 会对比【工作目录】和【暂存区】间的内容,,然后将【工作目录】已修改但未存入【暂存区】的内容展示出来

git diff --staged会对比【暂存区】和版本库中最新的一个版本,即最后一次commit上去的内容,把【暂存区】和【版本库】的差异展示出来,如果一样,无返回(--staged和--cached是一回事)



对比的是已追踪的文件

git commit -a -m "注释" Git 在提交前自動預存所有已追蹤的檔案,讓你略過 git add 步驟(前提是文件已被追踪)

在提交之前,你並不需要執行 git add 來預存 b.txt 檔案; 那是因為 -a 選項會納入所有已變更的檔案; 很方便,但請小心,有時候它會納入你並不想要的變更。



如果将【工作目录】即电脑本地的文件删除(rm ),git status会显示:有变更但未添加到【暂存区】,暂存区有而工作目录没有



如果接下来执行 git rm,【暂存区】会记录该档案的移除动作



另一個有用的技巧是保留工作目錄的檔案,但將它從預存區中移除; 換句話說,你或許想保留在磁碟機上的檔案但不希望 Git 再繼續追蹤它; 當你忘記將某些檔案加到 .gitignore 中而且不小心預存它的時候會特別用有,像是不小心預存了一個大的日誌檔案或者一堆 .a 已編譯檔案。 加上 --cached 選項可做到這件事:

git rm --cached



git rm --cached 只删除暂存区的文件,rm 只删除工作目录的文件,git rm 工作目录和暂存区的文件都删除

git mv b.txt bb.txt 可给文件更名

git add -A 和 git add . 的区别
  • git add . :他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。
  • git add -u :他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写)
  • git add -A :是上面两个功能的合集(git add --all的缩写)

参考

参考二

参考三

参考四

git从入门到放弃的更多相关文章

  1. GIT 从入门到放弃大整理

    跟着廖雪峰学 GIT  http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 GUI f ...

  2. GIt 从入门到放弃

    一.注册github账号 github网址https://github.com/ 下一步 然后,你的邮箱会收到一封邮件,进行邮箱验证就行了 二.创建github仓库 登录你的github,在首页的右方 ...

  3. 30分钟Git命令入门到放弃

    git 现在的火爆程度非同一般,它被广泛地用在大型开源项目,团队开发,以及独立开发者,甚至学生之中. 初学者非常容易被各种命令,参数吓哭.但实际上刚上手你并不需要了解所有命令的用途.你可以从掌握一些简 ...

  4. 30分钟Git命令“从入门到放弃”

    git 现在的火爆程度非同一般,它被广泛地用在大型开源项目中,但是初学者非常容易“从入门到放弃”,各种命令各种参数,天哪,宝宝要吓哭了.实际上新手并不需要了解所有命令的用途,学习是需要一个循序渐进的过 ...

  5. CYQ.Data 从入门到放弃ORM系列:开篇:自动化框架编程思维

    前言: 随着CYQ.Data 开始回归免费使用之后,发现用户的情绪越来越激动,为了保持这持续的激动性,让我有了开源的念头. 同时,由于框架经过这5-6年来的不断演进,以前发的早期教程已经太落后了,包括 ...

  6. 《区块链:从入门到放弃》之obc安装步骤

    obc安装步骤 朋友们可能会好奇,厨师不研究菜谱怎么改研究兵法了,哈哈,我原本是app出身,最近被安排去预研区块链和比特币技术,2个月下来,颇有斩获.期间得到IBM的CC同学指导我一步一步安装obc的 ...

  7. 从入门到放弃,.net构建博客系统(二):依赖注入

    文章目录:<从入门到放弃,.net构建博客系统> 从入门到放弃,.net构建博客系统(一):系统构建 从入门到放弃,.net构建博客系统(二):依赖注入 上一篇中有讲到项目启动时会进行io ...

  8. NetCore实践篇:分布式监控客户端ZipkinTracer从入门到放弃之路

    前言 本文紧接上篇.Net架构篇:思考如何设计一款实用的分布式监控系统?,上篇仅仅是个思考篇,跟本文没有太大的关系.但有思考,结合现有的开源组件,实践起来更易理解起来,所以看本文之前,应该先看下上篇博 ...

  9. dotnet 从入门到放弃的 500 篇文章合集

    本文是记录我从入门到放弃写的博客 博客包括 C#.WPF.UWP.dotnet core .git 和 VisualStudio 和一些算法,所有博客使用 docx 保存 下载:dotnet 从入门到 ...

随机推荐

  1. MVC所有的ActionResult

    一.所有的Controller都继承自System.Web.Mvc.Controller 目前ASP.NET MVC3默认提供了多种ActionResult的实现,在System.Web.Mvc命名空 ...

  2. 迁移桌面程序到MS Store(6)——.NET Portability Analyzer

    上一篇我们简单介绍了.NET Standard,本篇我们来实践.NET Framework 4.5 Class Library到.NET Standard 2.0的转换.        首先让我们来做 ...

  3. Python文件读写及网站显示

    一.关于文件读写的笔记 (一) 文件概述 文件是一个存储在辅助存储器上的数据序列,可以包含任何数据内容 文件都是按照2进制进行存储的,但在表现形式上有2种:文本文件和二进制文件. 1. 文本文件 文本 ...

  4. jmeter 中 浮点数计算精度问题

    jmeter 中 浮点数计算精度问题解决方法: 编写 beanshell 时使用 java.math.BigDecimal 方法构造,使用 BigDecimal 并且一定要用 String 来够造. ...

  5. Python入门 ---基础知识

    Python入门不知道这些你还是承早放弃吧!真的 Python 简介 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计具有很强的可读性,相比其他语言 ...

  6. @transactional作用和事务

    今天在博客园看到有发布spring的注解,留意到@transactional这个注解.立马就百度.学习了 使用这个注解的类或者方法表示该类里面的所有方法或者这个方法的事务由spring处理,来保证事务 ...

  7. JavaScript 那些不经意间发生的数据类型自动转换

    JavaScript可以自由的进行数据类型转换,也提供了多种显式转换的方式.但是更多的情况下,是由JavaScript自动转换的,当然这些转换遵循着一定的规则,了解数据类型自由转换的规则是非常必要的. ...

  8. Spring Integration Zip不安全解压(CVE-2018-1261)漏洞复现

    不敢说分析,还是太菜了,多学习. 文章来源: 猎户安全实验室 存在漏洞的源码下载地址:https://github.com/spring-projects/spring-integration-ext ...

  9. 人工智能-机器学习之numpy方法

    机器学习 最重要的东西就是算法   这里面的水很深  所以呢我就简单的整理了一下 基础的操作     #导入numpy库 as别名 为了怕重名 import numpy as np # 打印版本号 p ...

  10. [原创]K8 Struts2 Exp 20170310 S2-045(Struts2综合漏洞利用工具)

    工具: K8 Struts2 Exploit组织: K8搞基大队[K8team]作者: K8拉登哥哥博客: http://qqhack8.blog.163.com发布: 2014/7/31 10:24 ...