git中文件的状态有两种:已跟踪或者未跟踪。

从现有目录中创建git仓库 git init

git仓库(repository),也叫做版本库。使用git的目的是管理项目,并且保存一些随时间变化的文件。git使用git仓库来保存这些信息。

git仓库作为一个目录保存在项目目录中,目录名为 .git。作为一种分布式版本控制工具,git仓库中包含了项目的所有被记录信息。

在目录中,使用 $ git init 命令创建git仓库。

下面的例子在 /home/wm/project/wm_git_book/ 目录下创建了git仓库,即项目目录 wm_git_book 开始由git进行版本控制。

$ git init

Initialized empty git repository in /home/wm/project/wm_git_book/.git/

命令后的提示说明在指定位置创建了一个空仓库。现在 wm_git_book 目录中有了一个 .git 目录,这就是git仓库。

使用同样的命令也可以在已经存在文件的目录中创建仓库。

文件的状态:跟踪与未跟踪、文件状态变化情况

被git管理的工作目录中的文件无非两种状态:已跟踪或者未跟踪。

已跟踪的文件是指那些被git管理的文件,在上一次快照中有他们的记录。已跟踪的文件可的状态能是未修改的、已修改的或者已暂存的。

工作目录中除了已跟踪的文件,其余全是未跟踪的文件。

初次克隆某个仓库的时候,工作目录中所有文件都是已跟踪未修改状态。修改了某些文件后,进行暂存和提交,如此反复。

使用git时文件状态变化情况如下:

file_status

查看状态 git status

如果要查看文件的状态,可以使用 git status 命令。

$ git status

On branch master

Initial commit

nothing to commit (create/copy files and use "git add" to track)

git告诉我们,目前在 master 分支,或者说主分支。主分支是每一个使用git管理的项目的默认分支。

git还告诉我们,目前没有要提交的内容,并且提示我们用 git add 将文件进行跟踪。

现在我们来创建一个 README.txt 文件,内容如下:

Hi, git!

现在用 git status 查看一下状态:

$ git status

On branch master

Initial commit

Untracked files:

(use "git add ..." to include in what will be committed)

README.txt

nothing added to commit but untracked files present (use "git add" to track)

git告诉我们,工作区中有一个修改的文件 README.txt,它是未跟踪文件。git 不会 自动跟踪文件,跟踪新的文件需要手动操作,这样可以避免二进制或者其他不想跟踪的文件被跟踪。

暂存与提交 git add, git commit [-ma]

使用 git add 跟踪一个文件,并且将其纳入暂存区。git add使用文件或者目录作为参数,如果参数是目录,那么会递归地跟踪该目录下左右文件。下面将跟踪 README.txt 文件:

$ git add README.txt

没有提示就是好提示。再次使用 git status 查看状态:

$ git status

On branch master

Initial commit

Changes to be committed:

(use "git rm --cached ..." to unstage)

new file: README.txt

可见,此时 README.txt 已经被暂存(staged),并且作为下次提交(commit)的新文件。

使用 git commit 对暂存的文件进行提交,提交之后文件就会被保存在git仓库中。使用前请确定所有需要提交的文件都已经 git add 过,使用方法如下:

$ git commit -m "Add README.txt"

[master (root-commit) bf47a4f] Add README.txt

1 file changed, 1 insertion(+)

create mode 100644 README.txt

git commit的-m选项让用户将提交命令和信息在一行写完。上面的Add README.txt是用户对本次提交的说明,即提交信息。提交内容是暂存区的内容,提交后,系统会显示本次提交的分支(master)、完整SHA-1校验和(bf47a4f)以及文件的更改。

提交的文件是已经添加到暂存区的文件快照,在工作目录中未添加到暂存区的文件不会被提交。已经添加到暂存区的文件,但是在工作目录中被修改,而没有再次添加到暂存区,提交的是暂存区中的文件快照。

如果确实有很多提交信息要写,可以直接使用git commit命令,执行命令后,结果如下:

# 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: b.txt

#

其中第一行是填写提交信息的地方,所有已#开头的行都是注释,可以删除掉,也可以保留。默认注释行写了分支和文件情况。使用git config --global来设置你喜欢的编辑软件。

暂存区可以让用户精心的准备需要提交的文件,但是有时候也会略微繁琐。如果不想通过暂存区而直接提交,可以使用git commit -a命令。这个命令可以将所以已经跟踪过的文件暂存起来一并提交,而不用git add。已经跟踪的文件是指该文件被git管理,表现为暂存区或者git仓库中有该文件的快照。

现在修改README.txt的内容,在文件末尾添加一行git is a free and open source distributed version control system.,然后使用-a选项提交。

$ cat README.txt

Hi, git!

git is a free and open source distributed version control system.

$ git status

On branch master

Changes not staged for commit:

(use "git add ..." to update what will be committed)

(use "git checkout -- ..." to discard changes in working directory)

modified: README.txt

no changes added to commit (use "git add" and/or "git commit -a")

$ git commit -a -m "Add a description to git in README.txt"

[master 8307318] Add a description to git in README.txt

1 file changed, 1 insertion(+)

$ git status

On branch master

nothing to commit, working directory clean

可以看到,README.txt作为一个已经被跟踪的文件,在修改后不使用git add添加到暂存区,而直接使用git commit -a就可以提交。

暂存已修改的文件、状态简览 git status -s

现在在README.txt末尾补充一句:git is very easy to learn.。并且把它加到暂存区。

$ cat README.txt

Hi, git!

git is a free and open source distributed version control system.

git is very easy to learn.

$ git status

On branch master

Changes not staged for commit:

(use "git add ..." to update what will be committed)

(use "git checkout -- ..." to discard changes in working directory)

modified: README.txt

no changes added to commit (use "git add" and/or "git commit -a")

$ git add README.txt

$ git status

On branch master

Changes to be committed:

(use "git reset HEAD ..." to unstage)

wenjain

modified: README.txt

README.txt是被跟踪的文件,在修改之后,它的状态是:已经修改,还没有暂存。然后将它添加到暂存区。可见,git add既可以用来跟踪新的文件,亦可以将已经跟踪的文件添加到暂存区。git add的作用是将文件添加到暂存区,暂存区是下一次提交的文件,因此git add也可以理解为将此文件作为下次提交的文件。

再次修改README.txt,在其末尾添加git is very fast.。再次查看状态。

$ cat README.txt

Hi, git!

git is a free and open source distributed version control system.

git is very easy to learn.

git is very fast.

$ git status

On branch master

Changes to be committed:

(use "git reset HEAD ..." to unstage)

modified: README.txt

Changes not staged for commit:

(use "git add ..." to update what will be committed)

(use "git checkout -- ..." to discard changes in working directory)

modified: README.txt

出现了两个README.txt,其中一个是待提交(在暂存区),一个是未暂存(在工作目录)。这个现象的原因是git暂存区只保存了文件在执行git add时的版本,如果此时提交,则只会提交文件被最后一次git add时的快照,而不是在工作目录中的当前版本。

现在运行git status -s可以得到下面的结果:

$ git status -s

MM README.txt

git status -s会显示简单的状态,在上面的例子中README.txt的左边的M表示该文件被修改了并且已经放入了暂存区,右边的M表示被修改了但是还没有放入暂存区。下面是一个输出样本:

$ git status -s

MM README.txt

M makefile

A xxx.txt

M aaa.c

?? LICENSE.txt

README.txt在修改后添加到暂存区,又被修改之后未加入暂存区。makefile被修改了但未加入暂存区。A标记的xxx.txt表示该文件是第一次被加入到暂存区。aaa.c被修改后加入暂存区,并且未再次被修改。??标记的LICENSE.txt表示该文件未被跟踪。

git 将暂存区文件提交_git文件状态,暂存与提交相关推荐

  1. git 将暂存区文件提交_Git知识

    Git 快速开始 一. 下载git 地址 : https://git-scm.com/downloads 二.git基础 1.git config 相关命令 # local 只对某一个仓库有效git ...

  2. git 将暂存区文件提交_git 暂存区

    一.Git基本工作流程 1.初始化一个仓库 git  init git  clone git仓库分为两种情况: 第一种是在现有项目或目录下导入所有文件到 Git 中: 第二种是从一个服务器克隆一个现有 ...

  3. 【原创】Git删除暂存区或版本库中的文件

    0 基础     我们知道Git有三大区(工作区.暂存区.版本库)以及几个状态(untracked.unstaged.uncommited),下面只是简述下Git的大概工作流程,详细的可以参见本博客的 ...

  4. git如何查看缓存区文件内容_GIT实操手册 —— 值得收藏的GIT常用命令字典

    目录git config 配置 git help 显示有关Git的帮助信息 git init 初始化 git add 将文件内容添加到暂存区 git clone 将存储库克隆到新目录中 git sta ...

  5. git pull 是到工作区还是暂存区_每天一Git之简单理解工作区和暂存区

    每天一Git之简单理解工作区和暂存区 1. 工作区与暂存区命令初体验 1.1. 暂存区文件与文件夹管理 [root@number ~]# cd GitDir/git_learning/ [root@n ...

  6. git学习(四):理解git暂存区(stage)

    与一般的版本管理不同的是,git在提交之前要将更改通过git add 添加到暂存区才能提交(git commit).即使是已经交给了git来管理的文件也是如此.这里继续学习git的暂存区. 通过git ...

  7. 代码刚提交暂存区,组长突然要我把新增代码 Commit另一分支怎么办?

    1. 背景 最近刚换公司,上家公司使用 svn 进行代码的版本控制,而现在公司使用的是git .因为自己平常也有使用 git,所以基本使用操作还是没有问题的. 最近需要做的新功能需求讨论了一周,这期间 ...

  8. 【原创】关于Git暂存区的理解

    关于Git暂存区的理解      暂存区可以说是Git的三大重要的区域之一,另外两个分别是工作目录和Git仓库,所以说对暂存区的深入理解可以帮助我们理解很多Git命令背后隐藏的工作原理.今天,本文将以 ...

  9. Git——三大分区【工作区 / 暂存区 / 版本区】

    前言:Git作为一个版本管理工具,最核心组成思想是它的三个分区:工作区.暂存区和工作区. 1. 工作区   Git的工作区也就是我们平时编辑代码的目录文件夹. 2. 暂存区   暂存区就是一个暂时放置 ...

最新文章

  1. JAVA 设计模式 模板方法模式
  2. 一文读懂MySQL事务锁、事务级别
  3. unreachable code 错误解决方法
  4. idea 快捷键在方法上抛出异常
  5. CentOS 6.4配置TL-WN823N外置无线网卡
  6. JS Event handler example - event capture and bubble
  7. Java笔记-连接本地代理服务
  8. ansys用什么cpu_ansys参数化建模教程专栏——以例子吹爆APDL的省时省力(一)。...
  9. vivado 启动过程中报错
  10. 零百1.8秒的电动车竟然是威马... | 云逛成都车展
  11. DAY3 scp,rsync,chmod,chown,setfacl
  12. ipa下载安装神器?苹果软件这么容易就被搞定了
  13. iis服务器mp4不显示,IIS浏览器无法读取mp4视频的解决方法
  14. 递归实现 1,1,2,3,5,8,….第 30 个数是多少?
  15. Stone Ocean(https://acs.jxnu.edu.cn/problem/GYM103495E)
  16. 以太坊源码分析-同步之Syncing接口
  17. python面试No7
  18. 自身知识浅薄,开发积累问题
  19. 苹果计算机如何改变错误文字,教你如何修改MAC系统默认文字
  20. Acme的cmd line模式

热门文章

  1. 【备品备件需求】--入库记录查询增加仓库字段
  2. 网络中的代理(proxy)和NAT
  3. hp扫描无法选择发送到计算机,HP Officejet Pro 8600打印机无法使用扫描到计算机的功能...
  4. 如何找到能商用的背景纯音乐
  5. [MQ]消息队列与企业服务总线的简单比较,MQESB
  6. 微信小程序云开发之网易云音乐
  7. sincerit 小乐乐切割方块(规律+思考)
  8. php生成其他网页截图,php实现网页截图
  9. 联想服务器能够上固态硬盘吗,拯救我的台式机:Lenovo 联想 固态硬盘 入手记
  10. python喜马拉雅_Python爬虫实战案例:取喜马拉雅音频数据详解!