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。如:
用vi编辑完后,按esc,输入wq命令保存并退出。
顺便记录一下保存命令
按ESC键跳到命令模式,然后:
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文件夹就是一个工作区。
图片引自: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
此时修改的文件操作为最后一行添加了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