pwd

用于显示当前目录

MaiBenBen@An MINGW64 ~
$ pwd
/c/Users/MaiBenBen

mkdir xxx

创建目录

MaiBenBen@An MINGW64 ~
$ mkdir myFirstRepository

cd xxx

切换到 xxx 目录下面 ;

MaiBenBen@An MINGW64 ~
$ cd myFirstRepository

//已经切换到 myFirstRepository 下面
MaiBenBen@An MINGW64 ~/myFirstRepository
$ pwd
/c/Users/MaiBenBen/myFirstRepository

如果想要切换盘符,则使用 cd /xx

MaiBenBen@An MINGW64 ~
$ cd /d

//切换到 D 盘 
MaiBenBen@An MINGW64 /d
$ pwd
/d

vi xxx

使用 vim 编辑器,编辑 xxx 文件 ;


Git init

在文件夹里面使用该命令,就会将所在的文件夹变为 Git 的仓库 ,但是一般该文件夹的名字,其所在的目录都不要有中文字符;创建完毕以后,文件夹中会多出一个 .git 文件,该文件是用 Git 自己用的,用于管理版本库,一般不要手贱去动它 ;

MaiBenBen@An MINGW64 /e/myFirstRepository
$ git init
Initialized empty Git repository in E:/myFirstRepository/.git/

Git add xxx

将文件 添加Git 仓库中,(只是添加到仓库) ;

Git 能记录追踪文本文件的内容变化,对于音频、图像等二进制数据,它是无法记录追踪器具体变化的,最多记录追踪其大小变化!这里其中说一下 Word 为了加密自己的格式,是使用二进制保存的,因此 Git 也无法追踪其变化!

添加 到仓库的文件,需要先放到仓库文件夹或者其子文件夹下面,对文件名大小写敏感!

MaiBenBen@An MINGW64 /e/myFirstRepository (master) 
$ git add readme.txt

Git commit [-m “message”]

这才是将文件 提交 到仓库,方括号中可选项,用于添加提交说明,为什么提交本次代码 ;

MaiBenBen@An MINGW64 /e/learnGit (master)
$ git commit -m "修改后的文件说明"
[master (root-commit) 2cfc997] 修改后的文件说明
 1 file changed, 3 insertions(+)
 create mode 100644 Readme.txt


Git status

查看仓库的情况,是否有文件更新,是否有文件未提交 等等 ;

MaiBenBen@An MINGW64 /e/learnGit (master)
$ 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  // 一个被修改的文件

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


Git diff

查看文件内容的改动;

MaiBenBen@An MINGW64 /e/learnGit (master)
$ git diff
warning: LF will be replaced by CRLF in Readme.txt.
The file will have its original line endings in your working directory.
diff --git a/Readme.txt b/Readme.txt
index 7bc9289..61d385f 100644
--- a/Readme.txt
+++ b/Readme.txt
@@ -1,3 +1,6 @@
 哈哈啊哈 2018111411:33:48
 使用 VIM 编辑,有点难受呀马飞;
-
+ESC 进入模式选择!
+:W 保存
+:q 退出
+A 进入编辑

+ xxx 代表新增的内容;
- xxx 代表删除的内容 ;


Git log

查看历史操作,查看我们曾经对文件的修改;

MaiBenBen@An MINGW64 /e/learnGit (master)
$ git log
// 最近一次修改(第二次修改)
commit e933eb076326c563beb9fe4dbdaaf8bf4de2690a (HEAD -> master)
Author: Allbet <1255621959@qq.com>
Date:   Wed Nov 14 13:29:50 2018 +0800

    对Readme.txt文件进行修改

// 第一次修改
commit 2cfc99744cadc4d3091a42e1c9bfa59e6696f726
Author: Allbet <1255621959@qq.com>
Date:   Wed Nov 14 11:43:24 2018 +0800

    修改后的文件说明

可以看到,我们一共对文件进行了两次修改 ;

如果不想看这些具体信息,比如:修改者、修改时间等,可以加上参数 : --pretty=oneline ,仅保留版本号、修改说明 ;

MaiBenBen@An MINGW64 /e/learnGit (master)
$ git log --pretty=oneline
e933eb076326c563beb9fe4dbdaaf8bf4de2690a (HEAD -> master) 对Readme.txt文件进行修改
2cfc99744cadc4d3091a42e1c9bfa59e6696f726 修改后的文件说明


cat xxx

查看 xxx 文件内容 ;

MaiBenBen@An MINGW64 /e/learnGit (master)
$ cat Readme.txt
哈哈啊哈 2018111411:33:48
使用 VIM 编辑,有点难受呀马飞;

Git reset --hard xxx

回退到之前的某个版本;

想要回退,则必须让 Git 知道回退到哪个版本, Git 中,使用 head 代表最新版本,***head^*** 代表前一个版本, head^^ 代表前2个版本,不使用 ^ 也行,使用 head~1 代表前一个版本,后面的版本以此类推;

MaiBenBen@An MINGW64 /e/learnGit (master)
$ git reset --hard Head~1
HEAD is now at 2cfc997 修改后的文件说明

MaiBenBen@An MINGW64 /e/learnGit (master)
$ cat Readme.txt
哈哈啊哈 2018111411:33:48
使用 VIM 编辑,有点难受呀马飞;

此时,使用 Git log --pretty=oneline 查看历史记录,发现刚刚的新版本不复存在了;

MaiBenBen@An MINGW64 /e/learnGit (master)
$ git log --pretty=oneline
2cfc99744cadc4d3091a42e1c9bfa59e6696f726 (HEAD -> master) 修改后的文件说明

要是想在回退到之前的新版本,也是可以的,但是需要使用具体的版本号,没有 head 这样的代表可以使用了;

MaiBenBen@An MINGW64 /e/learnGit (master)
$ git reset --hard e933eb   //写上版本号
HEAD is now at e933eb0 对Readme.txt文件进行修改

MaiBenBen@An MINGW64 /e/learnGit (master)
$ cat Readme.txt
哈哈啊哈 2018111411:33:48
使用 VIM 编辑,有点难受呀马飞;
ESC 进入模式选择!
:W 保存
:q 退出
A 进入编辑

可以看见文档又被恢复到之前的最新版了,同时我们还发现,版本号,是不需要写全部的,只需要写前面的几个即可, Git 会自己去根据前缀查找出具体的,但是要注意的是,给的版本号前缀,必须保证只能找到一个其唯一的全部版本号 ;


Git reflog

记录我们每次操作的对应的版本号;

MaiBenBen@An MINGW64 /e/learnGit (master)
$ git reflog
e933eb0 (HEAD -> master) HEAD@{0}: reset: moving to e933eb
2cfc997 HEAD@{1}: reset: moving to Head~1
e933eb0 (HEAD -> master) HEAD@{2}: commit: 对Readme.txt文件进行修改
2cfc997 HEAD@{3}: commit (initial): 修改后的文件说明

至此,我们可以随意的进行版本的回退,恢复,因为,每次操作的版本号,都在这里;

并其,我们可以发现, Git 内部是使用链表的一个机构保存每个版本的,即使我们回退到之前的任意一个版本,后续的版本也都在,不是被删除了;


暂存区

Git 有个暂存区的概念,每个人的电脑上,使用 git init 创建一个仓库的时候,自动生成的 .git 文件夹,里面进行管理版本库, .git 版本库,被分成一个 master 主分支区和暂存区;

每次 add 都是先添加到暂存区中的, commit 以后,才会清空暂存区,将里面的文件添加到 master 主分支上;


git diff head – xxx

查看 xxx 文件,在库中的主版本和当前工作区中的差别;

MaiBenBen@An MINGW64 /e/learnGit (master)
$ git diff Head -- Readme.txt
diff --git a/Readme.txt b/Readme.txt
index 61d385f..a388d8a 100644
--- a/Readme.txt
+++ b/Readme.txt
@@ -2,5 +2,7 @@
 使用 VIM 编辑,有点难受呀马飞;
 ESC 进入模式选择!
 :W 保存
-:q 退出
-A 进入编辑
+:Q 退出
+A 插入
+S 删除
+

如果没有差别,则不输出;


git checkout – xxx

撤销 工作区 中对 xxx 文件的全部修改,让其回滚到最近一次的 git addgit commit 操作的状态,其实就是拿着版本库中的文件,进行替换工作区中的文件 ;


git reset HEAD

想要撤销暂存区中文件,该命令会将暂存区中的命令,拿回到工作区;


rm xxx

xxx 文件从工作区删除,但是此时版本库还有该文件;

MaiBenBen@An MINGW64 /e/learnGit (master)
$ rm test.txt

可以使用  git status ,观察库的变化,此时会被告知有文件被删除;

MaiBenBen@An MINGW64 /e/learnGit (master)
$ git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        deleted:    test.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        .Readme.txt.swp

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


git rm xxx

从版本库之中删除 xxx 文件,跟着 git commit 一起,就可以彻底的删除文件了;

如果想要恢复被删除的文件,则使用 git checkout -- xxx ,该命令会移除所有操作;

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐