Git学习-本地仓库与版本管理

一. 创建仓库

1. 创建空仓库

在合适的位置创建一个新目录,Git Bash支持的是linux命令操作。

第一种方法:

$ mkdir mygit
$ cd mygit
$ pwd

用mkdir创建目录,pwd查看当前路径 

Administrator@Mr-LIU MINGW64 /d
$ mkdir mygit

Administrator@Mr-LIU MINGW64 /d
$ cd mygit

Administrator@Mr-LIU MINGW64 /d/mygit
$ ls

Administrator@Mr-LIU MINGW64 /d/mygit
$ pwd
/d/mygit

 第二种方法更方便,在windows里进入到想建立仓库的目录下,鼠标右键,会出现Git Bash选项,点击就能进入了。

 2.用git init进行git初始化,该命令会将该目录变成一个git能够管理的仓库。

$ git init
Administrator@Mr-LIU MINGW64 /d/mygit
$ git init
Initialized empty Git repository in D:/mygit/.git/

初始化完成后,会提示这个仓库为空的(empty),并且生成了一个.git目录,这个目录是Git来跟踪管理版本库的,一般不轻易修改,否则会对仓库造成影响,如果看不见.git目录,可以用ls -ah显示。

3.添加文件到仓库

新建一个readme.txt文件,里面写入一些信息。一般不用windows的记事本去写,据说是微软公司的开发团队在每个文件开头添加了0xefbbbf(十六进制)的字符,这会导致出现各种问题,网页第一行可能会显示一个“?”,明明正确的程序一编译就报语法错误,等等。因此一般用纯文本编辑器去写,如notepad++,editplus,也可以用vi。如:

Git学习-本地仓库与版本管理_第1张图片

用vi编辑完后,按esc,输入wq命令保存并退出。

顺便记录一下保存命令

按ESC键跳到命令模式,然后:

  • :w保存文件但不退出vi 编辑
  • :w! 强制保存,不退出vi 编辑
  • :w file将修改另存到file中,不退出vi 编辑
  • :wq保存文件并退出vi 编辑
  • :wq!强制保存文件并退出vi 编辑
  • :q不保存文件并退出vi 编辑
  • :q!不保存文件并强制退出vi 编辑
  • :e!放弃所有修改,从上次保存文件开始在编辑

 

readme.txt写好后就可以添加了

用git add可以添加文件,支持一次添加多个文件。

$ git add readme.txt

执行后没有提示语句

接下来进行提交

$ git commit -m "********"

*****表示提示性语句,表示本次提交了一个什么文件,利于自己和他人查阅,如果后期要修改就可以从历史记录找到。

Administrator@Mr-LIU MINGW64 /d/mygit (master)
$ git commit -m "commit a readme.txt"
[master (root-commit) 7c2e871] commit a readme.txt 1 file changed, 4 insertions(+)
 create mode 100644 readme.txt

执行后表示之前添加的文件现在已经成功提交了。

二. 版本管理

1.版本回退

首先可以对readme.txt进行修改,然后进行添加和提交,通过git log命令查看提交历史记录,默认显示的是从近到远的3条记录。

Administrator@Mr-LIU MINGW64 /d/mygit (master)
$ git log
commit eef545f8e09d06387e8b1c56c2344550ae816b07 (HEAD -> master)
Author: ResumeBB <[email protected]>
Date:   Mon Aug 3 00:04:56 2020 +0800

    commit 2

commit 7c2e8710955f43e0fbaae240358051da112b33d9
Author: ResumeBB <[email protected]>
Date:   Sun Aug 2 23:56:26 2020 +0800

    commit a readme.txt

接下来进行版本回退,commit后面的一长串是提交的版本id号,在Git中,用HEAD表示当前版本,也就是最新的提交,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

$ git reset --hard HEAD^
Administrator@Mr-LIU MINGW64 /d/mygit (master)
$ git reset --hard HEAD^
HEAD is now at 7c2e871 commit a readme.txt

用cat命令查看是否回退: 

Administrator@Mr-LIU MINGW64 /d/mygit (master)
$ cat readme.txt
这是一个版本说明实例
this is a example!
1234567890

可以发现确实回退到了上一个版本。

2.版本快进

如果想回到最新版本可以继续使用reset命令,用版本号回到指定版本,一般只用前几位就可以了,不用全写,但若版本过多为了保持唯一性可以多写两位可以保证找到。

Administrator@Mr-LIU MINGW64 /d/mygit (master)
$ git reset --hard eef5
HEAD is now at eef545f commit 2

Administrator@Mr-LIU MINGW64 /d/mygit (master)
$ cat readme.txt
这是一个版本说明实例
this is a example!
1234567890
commit 2
commit 3

如果记不到版本号或者退出了git bash,可以用git reflog可以查看每一次的命令记录,然后找到版本号就可以前进了。

3. 工作区与缓存区

 

工作区(Working Directory)

就是在本地电脑里能看到的目录,比如mygit文件夹就是一个工作区。

Git学习-本地仓库与版本管理_第2张图片

图片引自:https://www.liaoxuefeng.com/wiki/896043488029600/897271968352576 

版本库(Repository)

工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

当用git add进行添加的时候,是将文件添加到版本库中的stage(暂存区)中,只有当用git commit提交后,文件才能真正提交到分支,同时stage中的内容也就清空了。

4. 管理修改

在git中,比如新增了一行,就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,甚至创建一个新文件,也算一个修改。在每一次修改后需要用add命令将修改后的文件提交到暂存区,再用commit提交到master,如果仅仅是修改文件,不提交到stage,则该文件不会被提交到master。

比如,先对readme.txt进行修改,然后用add命令添加到暂存区,然后对readme.txt进行第二次修改,这次不添加到暂存区,最后用commit进行提交后,用git status查看会发现,只有第一次的修改被提交上去了。

5. 撤销修改

当文件修改后,发现有问题,想要撤销修改,可以使用git checkout -- file

Administrator@Mr-LIU MINGW64 /d/mygit (master)
$ cat readme.txt
这是一个版本说明实例


Administrator@Mr-LIU MINGW64 /d/mygit (master)
$ git checkout -- readme.txt

Administrator@Mr-LIU MINGW64 /d/mygit (master)
$ cat readme.txt
这是一个版本说明实例
this is a example!
1234567890
commit 2
commit 3
latest modify

本来将readme删的只剩一行,用checkout命令后,发现操作被撤销了,readme文件又回到了修改前。 

当文件修改后并且不小心提交到stage中后,发现有问题想要撤销。

Administrator@Mr-LIU MINGW64 /d/mygit (master)
$ vi readme.txt

Administrator@Mr-LIU MINGW64 /d/mygit (master)
$ git add readme.txt

Administrator@Mr-LIU MINGW64 /d/mygit (master)
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged ..." to unstage)
        modified:   readme.txt

Git学习-本地仓库与版本管理_第3张图片

此时修改的文件操作为最后一行添加了latest modify语句,需要撤销它,可以使用git reset HEAD 语句进行撤销。

$ git reset HEAD readme.txt
Unstaged changes after reset:
M       readme.txt

然后查看status

$ gig status
bash: gig: command not found

发现操作被撤销了

如果手残不小心把文件add到stage中,并且还提交到master了,可以使用版本回退去撤销。

6.文件删除

Administrator@Mr-LIU MINGW64 /d/mygit (master)
$ cat new.txt
this is a example
Administrator@Mr-LIU MINGW64 /d/mygit (master)
$ git add new.txt

Administrator@Mr-LIU MINGW64 /d/mygit (master)
$ git commit -m "new.txt"
[master 6be0d5c] new.txt
 1 file changed, 1 insertion(+)
 create mode 100644 new.txt

Administrator@Mr-LIU MINGW64 /d/mygit (master)
$ rm new.txt

Administrator@Mr-LIU MINGW64 /d/mygit (master)
$ git status
On branch master
Changes not staged for commit:
  (use "git add/rm ..." to update what will be committed)
  (use "git restore ..." to discard changes in working directory)
        deleted:    new.txt

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

新建一个new.txt文件,提交后,用rm命令删除,用status查看状态可以发现删除操作。

最后用git rm从版本库中删掉,用commit提交删除命令就彻底删除了。

 

Administrator@Mr-LIU MINGW64 /d/mygit (master)
$ git rm new.txt
rm 'new.txt'

Administrator@Mr-LIU MINGW64 /d/mygit (master)
$ git commit -m "delete new.txt"
[master 2c971d7] delete new.txt
 1 file changed, 1 deletion(-)
 delete mode 100644 new.txt

 

 

 

 

 

你可能感兴趣的:(Git,git,linux,ubuntu,windows)