Git学习笔记 – 1
一.Git安装
1.下载
按默认选项安装即可(可选D盘)
2.完成
下载完成后,单机右键
3.打开
安装完成后,在开始菜单里找到“Git”->“Git Bash”
4.配置
还需要最后一步设置,在命令行输入:
admin@Lenovo-PC MINGW64 ~/Desktop/learngit
$ git config --global user.name "your namexxx"
admin@Lenovo-PC MINGW64 ~/Desktop/learngit
$ git config --global user.email "xxxxxxx@xxx.com"
二.创建版本库repository
1.创建
先创建一个空目录
admin@Lenovo-PC MINGW64 ~/Desktop
$ mkdir learngit //make directory
admin@Lenovo-PC MINGW64 ~/Desktop
$ cd learngit //change directory
admin@Lenovo-PC MINGW64 ~/Desktop/learngit
$ pwd //print working directory
/c/Users/admin/Desktop/learngit //自动显示Learngit所在目录
2.初始化
通过 ”git init“ 命令把这个目录变成Git可以管理的仓库:
admin@Lenovo-PC MINGW64 ~/Desktop/learngit
$ git init
Initialized empty Git repository in C:/Users/admin/Desktop/learngit/.git/
```
## 3.编写
**用notepad++编写一个readme.txt,并放到==learngit==目录下**
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200727154429618.JPG)
## 4.添加提交
**第一步,用命令==git add==告诉Git,把文件==添加==到仓库:**
```c
admin@Lenovo-PC MINGW64 ~/Desktop/learngit (master)
$ git add readme.txt
第二步,用命令git commit告诉Git,把文件提交到仓库:
admin@Lenovo-PC MINGW64 ~/Desktop/learngit (master)
$ git commit -m "worte a readme.txt" //-m后输入本次提交说明,方便找到改动记录。
[master (root-commit) ee23010] worte a readme.txt
1 file changed, 2 insertions(+) //1改动(新添加readme.txt);2插入(readme.txt有两行内容)
create mode 100644 readme.txt
三.简单修改
1.基本概念
我们先来理解下Git 工作区、暂存区和版本库概念
工作区:就是你在电脑里能看到的目录。
暂存区:英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
对于任何一个文件,在 Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)。已提交表示该文件已经被安全地保存在本地数据库中了;已修改表示修改了某个文件,但还没有提交保存;已暂存表示把已修改的文件放在下次提交时要保存的清单中。
2.修改文件
修改readme.txt文件内容
运行git status命令查看结果:
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: readme.txt //readme.txt被修改过了
no changes added to commit (use "git add" and/or "git commit -a") //但还没有准备提交
git status命令可以让我们时刻掌握仓库(工作区)当前的状态。
git diff如果git status告诉你有文件被修改过,用git diff可以查看修改difference。
$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
Git is free software.
3.提交修改
提交修改和提交新文件是一样的两步,第一步是git add:
$ git add readme.txt
再运行git status看看当前仓库的状态:
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: readme.txt
下一步,就可以放心地提交了:
$ git commit -m "add distributed"
[master e475afc] add distributed
1 file changed, 1 insertion(+), 1 deletion(-)
提交后,我们再用git status命令看看仓库的当前状态:
$ git status
On branch master
nothing to commit, working tree clean //当前没有需要提交的修改,工作目录是干净的
四.版本回退
1.创建多个版本
对readme.txt文件进行以下修改,这样一共有三个版本被提交到Git仓库里了:
版本1:wrote a readme file
Git is a version control system.
Git is free software.
版本2:add distributed
Git is a distributed version control system.
Git is free software.
版本3:append GPL
Git is a distributed version control system.
Git is free software distributed under the GPL.
2.查看版本号
在Git中,我们用git log命令查看:
$ git log
commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 21:06:15 2018 +0800
append GPL
commit e475afc93c209a690c39c13a46716e8fa000c366
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 21:03:36 2018 +0800
add distributed
commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 20:59:18 2018 +0800
wrote a readme file
如果嫌输出信息太多,看得眼花缭乱的,可以试试git log --pretty=oneline参数:
$ git log --pretty=oneline
1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPL
e475afc93c209a690c39c13a46716e8fa000c366 add distributed //数字字母为版本号
eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file
3.后向回退
现在,我们要把当前版本append GPL回退到上一个版本add distributed,就可以使用git reset命令:
$ git reset --hard HEAD^
HEAD is now at e475afc add distributed
利用cat查看readme.txt的内容是不是版本add distributed:
$ cat readme.txt
Git is a distributed version control system.
Git is free software.
再用git log再看看现在版本库的状态:
$ git log
commit e475afc93c209a690c39c13a46716e8fa000c366 (HEAD -> master)
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 21:03:36 2018 +0800
add distributed
commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 20:59:18 2018 +0800
wrote a readme file
最新的那个版本append GPL已经看不到了!
4.前向回退
git提供了一个命令git reflog用来记录你的每一次命令:
$ git reflog
e475afc HEAD@{1}: reset: moving to HEAD^
1094adb (HEAD -> master) HEAD@{2}: commit: append GPL
e475afc HEAD@{3}: commit: add distributed
eaadf4e HEAD@{4}: commit (initial): wrote a readme file
再找到那个append GPL的commit id是1094adb…,利用git reset --hard回到想要的版本
$ git reset --hard 1094a
HEAD is now at 83b0afe append GPL
五.修改
1.管理修改
操作过程:第一次修改 -> git add -> 第二次修改 -> git commit
Git管理的是修改,当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。
提交后,用git diff HEAD – readme.txt命令可以查看工作区和版本库里面最新版本的区别:
$ git diff HEAD -- readme.txt
diff --git a/readme.txt b/readme.txt
index 76d770f..a9c5755 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,4 +1,4 @@
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
-Git tracks changes.
+Git tracks changes of files.
可见,第二次修改确实没有被提交。所以Git是跟踪修改的,每次修改,如果不用git add到暂存区,那就不会加入到commit中。
2.撤销修改
用git status查看一下,修改是到了哪个区:
场景1:只修改了工作区,想直接丢弃工作区的修改时,用命令git checkout – file。
场景2:不但改了工作区内容,还git add到暂存区但未commit。想丢弃修改,分两步,第一步用命令git reset HEAD ,就回到了场景1,第二步按场景1操作。
场景3:已经commit了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
3.修改文件
一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了:(只在工作区删除)`
$ rm test.txt
现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit
$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
[master d46f35e] remove test.txt
1 file changed, 1 deletion(-)
delete mode 100644 test.txt
二是删错了,因为版本库里还有呢,所以可以用命令==git checkout --==把误删的文件恢复到最新版本:
$ git checkout -- test.txt
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。