git 将暂存区文件提交_git文件状态,暂存与提交

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时文件状态变化情况如下:

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 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技能树首页概览3087 人正在系统学习中 相关资源:电磁暂态f仿真软件ATP-EMTP-其它工具类资源-CSDN文库

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年11月28日
下一篇 2020年11月28日

相关推荐