Git(二)工作区和暂存区、添加一个新文件、撤销文件的修改或提交

一、几个基本概念:
工作区:
我们编辑文件的目录就是个工作区,上一讲讲到的我创建的test_git目录;

版本库:
实际上就是目录下的那个.git目录,我们可以看一下该目录的内容:

king@ubuntu:~/mydir/test_git/.git$ ls -al

drwxr-xr-x  2 king king 4096 May  2 21:36 branches
-rw-r--r--  1 king king   34 May  2 22:15 COMMIT_EDITMSG
-rw-r--r--  1 king king  136 May  2 21:51 config
-rw-r--r--  1 king king   73 May  2 21:36 description
-rw-r--r--  1 king king   23 May  2 21:36 HEAD
drwxr-xr-x  2 king king 4096 May  2 21:36 hooks
-rw-r--r--  1 king king  137 May  2 22:43 index
drwxr-xr-x  2 king king 4096 May  2 21:36 info
drwxr-xr-x  3 king king 4096 May  2 21:51 logs
drwxr-xr-x 10 king king 4096 May  2 22:15 objects
-rw-r--r--  1 king king   41 May  2 22:43 ORIG_HEAD
drwxr-xr-x  4 king king 4096 May  2 21:36 refs

暂存区:
实际上就是上述的index文件,有些也叫stage;
git会给我们自动创建的第一个分支master,以及指向master的一个指针HEAD;
在这里插入图片描述
其中:
git add code.cpp将修改的文件code.cpp加入到暂存区;
git commit code.cpp -m “版本说明” 对暂存区的文件生成一个版本然后提交到当前的分支;也就是说提交我们的更改。

二、示例说明:
1.示例:我们在工作区再创建一个文件code2.cpp,并且修改code.cpp:

king@ubuntu:~/mydir/test_git$ subl code.cpp 
king@ubuntu:~/mydir/test_git$ subl code2.cpp
king@ubuntu:~/mydir/test_git$ git status 
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

	修改:     code.cpp

未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)

	code2.cpp

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

2.命令git status 用来提示我们修改了哪些文件;
1.code.cpp被我们修改了;
2.由于code2.cpp新创建没有被我们添加,提醒我们需要用git add 和/或 git commit来添加,否则git无法帮助我们跟踪管理该文件。

3.将新文件和修改的文件添加到暂存区,并且创建一个新版本

1.将两个文件都添加到暂存区:
king@ubuntu:~/mydir/test_git$ git add code*

2.查看状态,发现两个文件还没有提交,一个是新建一个是修改的
king@ubuntu:~/mydir/test_git$ git status 
位于分支 master
要提交的变更:
  (使用 "git reset HEAD <文件>..." 以取消暂存)

	修改:     code.cpp
	新文件:   code2.cpp


3.将暂存区的文件创建一个新版本提交
king@ubuntu:~/mydir/test_git$ git commit -m "版本3"
[master c6f194e] 版本3
 2 files changed, 2 insertions(+)
 create mode 100644 code2.cpp
king@ubuntu:~/mydir/test_git$ git log
commit c6f194e6ed0c7acc894ef2d8237f0ef363a8a3a0 (HEAD -> master)
Author: txp <[email protected]>
Date:   Fri May 3 11:34:44 2019 +0800

    版本3

commit 40e2c0026454138c0b4195dcb0345b6d2e2646f1
Author: txp <[email protected]>
Date:   Thu May 2 22:15:47 2019 +0800

    这是修改后的第二个版本

commit c5593ed7ebd4be3d2884605928cf7de480bd6da2
Author: txp <[email protected]>
Date:   Thu May 2 21:51:20 2019 +0800

    这是我的第一个版本

实际上此时版本信息如下:
在这里插入图片描述
当我们提交了所有工作区的文件后:

king@ubuntu:~/mydir/test_git$  git status
位于分支 master
无文件要提交,干净的工作区

总结一下:
1.我们编辑文件是在工作区进行;
2.git add 是将我们在工作区编辑好的文件提交给git,让git跟踪管理我们的代码;
3.git commit是将我们放在暂存区的代码文件,创建一个版本记录,方便管理。

三、git只根据暂存区的修改来创建新版本:

1.在code.cpp中添加一行代码:
king@ubuntu:~/mydir/test_git$ subl code.cpp 
king@ubuntu:~/mydir/test_git$ git status 
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

	修改:     code.cpp

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")



2.然后将修改的code.cpp添加到暂存区中;
king@ubuntu:~/mydir/test_git$ git add code.cpp 
    
3.然后再去修改code.cpp
king@ubuntu:~/mydir/test_git$ subl code.cpp 

4.然后将code.cpp创建一个新版本:
king@ubuntu:~/mydir/test_git$ git commit -m "版本6"
[master ca792c5] 版本6
 1 file changed, 2 insertions(+)
king@ubuntu:~/mydir/test_git$ git status 
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

	修改:     code.cpp

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

总结:
即使我们commit了一个新版本,但是根据git status提示来看,还有被修改的未被提交;
说明git只会提交暂存区修改过的文件进行创建新版本。
所以:如果我们需要创建新版本,必须先把修改的文件添加到暂存区中。

四、如何撤销一个文件的修改:

扫描二维码关注公众号,回复: 6227894 查看本文章

1.撤回还没有加入到暂存区的文件修改,也就是还在暂存区的文件:

king@ubuntu:~/mydir/test_git$  git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

	修改:     code.cpp

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

使用 “git checkout – <文件>…” 丢弃工作区的改动:

撤回前:
king@ubuntu:~/mydir/test_git$ cat code.cpp
#include<iostream>
using namespace std;

int main()
{
	cout<<"hello world"<<endl;
	cout<<"this is the second line"<<endl;
	cout<<"this is the third line"<<endl;
	cout<<"this is the forth line "<<endl;
	cout<<"this is the five line"<<endl;
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
	dddddddddddddddddddddddddddddddddd
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
	oooooo
	return 0;
}

执行命令撤回:
king@ubuntu:~/mydir/test_git$  git checkout -- code.cpp

撤回后:
king@ubuntu:~/mydir/test_git$  cat code.cpp 
#include<iostream>
using namespace std;

int main()
{
	cout<<"hello world"<<endl;
	cout<<"this is the second line"<<endl;
	cout<<"this is the third line"<<endl;
	cout<<"this is the forth line "<<endl;
	cout<<"this is the five line"<<endl;
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
	dddddddddddddddddddddddddddddddddd
	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
	return 0;
}

2.如何撤回已经添加到暂存区的文件:

修改文件内容:
king@ubuntu:~/mydir/test_git$ subl code.cpp

将修改的文件添加到暂存区:
king@ubuntu:~/mydir/test_git$ git add code.cpp

下面提醒如何取消暂存区的文件:
king@ubuntu:~/mydir/test_git$ git status
位于分支 master
要提交的变更:
  (使用 "git reset HEAD <文件>..." 以取消暂存)

	修改:     code.cpp

使用git reset HEAD <文件> 来撤销添加到暂存区操作:

king@ubuntu:~/mydir/test_git$ git reset HEAD code.cpp
重置后取消暂存的变更:
M	code.cpp
king@ubuntu:~/mydir/test_git$ git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

	修改:     code.cpp

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

然后,我们回到工作区,按照撤销工作区的修改操作,就可以回到我们工作区修改前的文件,同上 如何撤销没有添加到工作区的文件修改。
在这里插入图片描述
如果已经创建了新的版本,想回退,参照第一篇文章,然后回到情景2,再到情景1.

猜你喜欢

转载自blog.csdn.net/KingOfMyHeart/article/details/89785759