Git-基本操作
Git
基本概念
- 工作区:电脑里看到的目录,如myrepo文件夹
- 暂存区:add后commit前的存储区域
- master:commit以后的存储区域
- 版本库:暂存区与master的并集
创建版本库
创建git仓库
$ mkdir myrepo//创建文件夹
$ cd myrepo//进入文件夹
$ pwd//显示当前目录
/c/Users/11546/Desktop/myrepo
$ git init//创建Git仓库
Initialized empty Git repository in C:/Users/11546/Desktop/myrepo/.git/
- .git目录默认隐藏,可用
ls-ah
命令看见
把文件添加到版本库
编写一个泊船瓜洲.txt文件,内容如下:
《泊船瓜洲》
京口瓜洲一水间,钟山只隔数重山。
春风又到江南岸,明月何时照我还。
把文件添加到Git仓库
$ git add 泊船瓜洲.txt//把文件添加到暂存区
$ git commit -m 新建文件,包含"春风又到江南岸"
[master (root-commit) 1fa6029] 新建文件,包含“春风又到江南岸”
1 file changed, 3 insertions(+)
create mode 100644 "\346\263\212\350\210\271\347\223\234\346\264\262.txt"
- 可以add多次再统一commit
修改文件
把泊船瓜洲.txt文件更改如下:
《泊船瓜洲》
京口瓜洲一水间,钟山只隔数重山。
春风又满江南岸,明月何时照我还。
运行git status
查看状态:
git status
可知有无需要commit的文件
运行git diff
查看修改内容:
再将修改add与commit
$ git add 泊船瓜洲.txt
$ git commit -m 把“到”改为“满”
[master e7e5a3f] 把“到”改为“满”
1 file changed, 1 insertion(+), 1 deletion(-)
$ git status
On branch master
nothing to commit, working tree clean
时间穿梭
版本回退
再将泊船瓜洲.txt改为:
《泊船瓜洲》
京口瓜洲一水间,钟山只隔数重山。
春风又绿江南岸,明月何时照我还。
将上述修改add并commit
使用git log
命令查看记录
$ git log
commit 05fc749e076386a404963258b9a61bdb724fa48c (HEAD -> master)
Author: jkq <1154609706@qq.com>
Date: Mon Mar 9 17:21:23 2020 +0800
把“满”改为“绿”
commit e7e5a3fd383391a777d7b964f3ce74a50e01ec2b
Author: jkq <1154609706@qq.com>
Date: Mon Mar 9 17:00:39 2020 +0800
把“到”改为“满”
commit 1fa6029ec6f9557e83fe0f63dbeece9b04def210
Author: jkq <1154609706@qq.com>
Date: Mon Mar 9 16:00:35 2020 +0800
新建文件,包含“春风又到江南岸”
- 若想一次修改显示在一行,则使用
$ git log --pretty=oneline
命令
回到上一个版本
整个仓库
$ git reset --hard HEAD~1
HEAD is now at e7e5a3f 把“到”改为“满”
$ git log
commit e7e5a3fd383391a777d7b964f3ce74a50e01ec2b (HEAD -> master)
Author: jkq <1154609706@qq.com>
Date: Mon Mar 9 17:00:39 2020 +0800
把“到”改为“满”
commit 1fa6029ec6f9557e83fe0f63dbeece9b04def210
Author: jkq <1154609706@qq.com>
Date: Mon Mar 9 16:00:35 2020 +0800
新建文件,包含“春风又到江南岸”
- HEAD~1表示上一个版本
单个文件
$ git checkout HEAD~1 -- 泊船瓜洲.txt
后悔回到上一个版本,想去未来版本(想去任何版本都通用)
找到想去到版本的commit id
-
若未关闭git bash,则直接往上找commit id
-
若已关闭git bash,则使用
git reflog
命令查看commit id$ git reflog e7e5a3f (HEAD -> master) HEAD@{0}: reset: moving to HEAD~1 05fc749 HEAD@{1}: commit: 把“满”改为“绿” e7e5a3f (HEAD -> master) HEAD@{2}: commit: 把“到”改为“满” 1fa6029 HEAD@{3}: commit (initial): 新建文件,包含“春风又到江南岸”
撤销修改
将泊船瓜洲.txt改为:
《泊船瓜洲》
京口瓜洲一水间,钟山只隔数重山。
春风又满江南岸,明月何时照我还。
不开心
-
文件修改后还未放到暂存区,撤销修改回到跟版本库一样的状态(上一次commit)
$ git checkout -- 泊船瓜洲.txt $ cat 泊船瓜洲.txt 《泊船瓜洲》 京口瓜洲一水间,钟山只隔数重山。 春风又满江南岸,明月何时照我还。
-
文件add到暂存区后又做了修改,撤销修改回到add到暂存区后状态
(1)先使得暂存区变干净,工作区有修改:
$ git reset HEAD 泊船瓜洲.txt Unstaged changes after reset: M 泊船瓜洲.txt
- HEAD表示当前版本
(2)再将工作区的修改用
git checkout -- 泊船瓜洲.txt
命令清除
删除文件
从文件管理器中删除泊船瓜洲.txt
$ rm 泊船瓜洲.txt
-
误删
$ git checkout -- 泊船瓜洲.txt
- 实质是用版本库里的版本替换工作区里的版本
-
确实要从版本库中删除
$ git rm 泊船瓜洲.txt rm '泊船瓜洲.txt' $ git commit -m 删除泊船瓜洲.txt [master 99387e8] 删除泊船瓜洲.txt 1 file changed, 3 deletions(-) delete mode 100644 "\346\263\212\350\210\271\347\223\234\346\264\262.txt"