Git 是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。Git 强大的分支管理,远远超过 SVN。那 git 如何创建版本库?如何进行一些常用的操作呢?欲知答案如何,请看下文分解。
小时候看过一部印象很深的剧叫做《穿越时空的爱恋》,今日也厚着脸皮导演一部《穿越时空的git》,不上映,纯属自嗨!
what is 版本库?无论我们平常使用git的频率如何,但是从事IT这个行业的小伙伴一定经常听到有人在说,哪个哪个牛X的项目在哪个仓库,哪个项目的仓库被人恶意添加issue(之前就听说了阿波罗计划的代码仓库中issue被很多无关的中文评论占楼~哎,咱们测试工程师一定不要这样做,为这个行业尽一份力);

Git 是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。Git 强大的分支管理,远远超过 SVN。那 git 如何创建版本库?如何进行一些常用的操作呢?欲知答案如何,请看下文分解。
小时候看过一部印象很深的剧叫做《穿越时空的爱恋》,今日也厚着脸皮导演一部《穿越时空的git》,不上映,纯属自嗨!
what is 版本库?无论我们平常使用git的频率如何,但是从事IT这个行业的小伙伴一定经常听到有人在说,哪个哪个牛X的项目在哪个仓库,哪个项目的仓库被人恶意添加issue(之前就听说了阿波罗计划的代码仓库中issue被很多无关的中文评论占楼~哎,咱们测试工程师一定不要这样做,为这个行业尽一份力);

说了这么多废话,其实我们平常说的仓库就是版本库,版本库又名仓库,英文名叫repository,相信很多用GitHub的小伙伴经常看到这个单词;

我就简单的把它理解成一个目录文件夹,里面可以放各种文件,和平常的使用管理一样,可以删除、修改;但是Git的”文件夹“更强大一点,它记性好-Git可以"记住"整个管理的历史,还能”存档“。
如何创建一个版本库,很简单:

  • 1)选择一个路径(you like just ok!),创建一个空目录
  • $ mkdir mygit
  • $ cd mygit
  • $ pwd
  • /Users/qinzhen/mygit #这里就是我的Mac上创建的仓库地址了

- 
- - 2)仓库地址创建好了,现在就是一个普通的文件夹,后使用git init命令将它变成”Git文件夹“,也就是把这个目录变成Git可以管理的仓库
- ```
- $ git init
- Initialized empty Git repository in /Users/qinzhen/mygit/.git/

它会提示说在你的目录下创建了一个空的Git仓库,并且目录下多了一个.git,这个时候就算创建完成了。

在看命令之前先来用一张图了解几个概念,可以方便理解和记忆:

  • 工作区(Working Directory)
    • 临时仓库(暂存区,Staging Area)
    • Git仓库(Repository)
  • 我们就是先在工作区进行文件的编辑操作;然后add到临时仓库,可以add多个;最后再commit一起提交到仓库中。
  • 接下来正式进入实操:
  • 1)在mygit路径下,创建文件readme.txt,输入以下内容:
  • I want to study Git


2)利用git add命令将文件提交到临时仓库(运行成功不会输出任何消息,看不到输出不要慌~)

$ git add readme.txt



3)再用git commit命令将文件从暂存区提交到仓库去

localhost:mygit qinzhen$ git commit -m “study git”
[master 64f5ced] study git
1 file changed, 2 insertions(+), 2 deletions(-)



命令解释:

-m : 添加注释,对本次提交写一个说明
1 file changed :
1个文件被改变,也就是readme.txt;
2 insertions(+):
2行插入了内容,也就是我们输入的两行内容
2 deletions(-):
2行内容缺失了,因为我是把readme.txt文件里原有的内容删除后添加的内容,
所以会有次改动提示,若是完全新建的就只会有添加的记录


- 
- - 1)我们先用git status查看当前仓库的状态
- ```
- localhost:mygit qinzhen$ git status
- On branch master
- nothing to commit, working tree clean

现在表示在一个master分支上没有可提交的东西,工作目录当前是干净的

    • 2)修改readme.txt文件:
  • I want to study Git very much.

- 
- - 3)再使用git status查看
- ```
- localhost:mygit qinzhen$ 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")

这时候可以看到文件已经被修改了,但是并没有被add和commit;

    • 4)再使用git diff(different)命令来查看当前操作和之前的操作有何区别之处,修改了哪里:
  • localhost:mygit qinzhen$ git diff
  • diff --git a/readme.txt b/readme.txt
  • index 225e15a…8080bd8 100644
  • — a/readme.txt
  • +++ b/readme.txt
  • @@ -1,2 +1,2 @@
  • I am a test engineer.
  • -I want to study Git.
  • +I want to study Git very much.


可以看到我在第二行增加了very much

- 
- - 1)我们先将刚才修改好的文件提交到仓库中:
- ```
- $ git add readme.txt
- $ git commit -m "very much"
- [master 7582a45] very much
-  1 file changed, 1 insertion(+), 1 deletion(-)
    • 2)我们再使用git log命令来看看之前都干了些什么:
  • $ git log

  • commit 7582a45a1acd9f5540f381d6e9bb7c9d38e74348 (HEAD -> master)

  • Author: qinzhen 376057520@qq.com

  • Date: Thu Sep 19 16:48:31 2019 +0800
    very much
    commit 64f5cedd48745267e4e161c57f126a9230344339
    Author: qinzhen 376057520@qq.com
    Date: Thu Sep 19 16:05:40 2019 +0800

    study git



在git log命令后,我们可以看到之前的提交commit历史,每一次提交都分配了唯一的commit id,这个id就是我们回到过去的关键,就相当与科幻电影中回到过去的某个时期

3.1)HEAD——现在,我如果想回到study git的”时期“,可以使用git reset --hard HEAD^

$ git reset --hard HEAD^
HEAD is now at 64f5ced study git

$ cat readme.txt
I am a test engineer.
I want to study Git.



这个时候我们可以看到,已经成功的回到了study git的”时期“,very much已经消失不见
命令解释:

如果回到过去不好理解的话,也可以理解为存档,本人小时候喜欢玩一款电脑游戏叫做红色警戒,
打任务战的时候每过一关前就会存档一次,这样就方便”死“了之后可以回到指定关卡重新再来
代表上一个存档,^代表上上个存档,如果想反会至上100个版本的话可以直接使用HEAD~100果回到过去



3.2)commit id——现在再修改文件,在第一行添加I can fly,然后add、commit:

I am a test engineer,I can fly.
I want to study Git.

$ git add readme.txt
$ git commit -m “I can fly”
[master 9c32701] I can fly
1 file changed, 1 insertion(+), 1 deletion(-)


git log 查看修改提交日志

$ git log
commit 9c327016eec10a6db7f9b75ecb705df417b6508c (HEAD -> master)
Author: qinzhen 376057520@qq.com
Date: Thu Sep 19 17:06:10 2019 +0800

I can fly

commit 64f5cedd48745267e4e161c57f126a9230344339
Author: qinzhen 376057520@qq.com
Date: Thu Sep 19 16:05:40 2019 +0800

study git

上面说了可以利用commit id回到过去,现在咱们就来试试;使用git reset --hard 64f5ce...命令:

$ git reset --hard 64f5ced
HEAD is now at 64f5ced study git

$ cat readme.txt
I am a test engineer.
I want to study Git.


从上面的结果可以看到,我们已经通过commit id成功回到了过去,回到了那个没有”I can fly“的年代;可以注意到的一点是,在写commit id的时候并没有写全,只是写了前面的一部分,git就可以找到了;
额。。。肯定有人要问具体是几位,说实话~我也不知道0.0,也没有专门去研究过,前四五位?六七位?七八位?达到使用要求就好啦,能保证id唯一,稍微多复制几个就可以了。。。


3.3)回到add前的年代——仅add文件到了暂存区,并没有commit;感觉好像是进入到了add的另一重空间,在未来也找不到他,那想回到原来的”时期“的话,就可以使用git reset HEAD <file>把file丢掉

现在我的readme.txt文件内容如下,并且已经add到了暂存区:

I am a test engineer.I can fly!
I want to study Git.

$ git status
On branch master
Changes to be committed:
(use “git reset HEAD …” to unstage)
modified: readme.txt


使用git reset HEAD readme.txt命令将修改从add撤销回来

$ git reset HEAD readme.txt
Unstaged changes after reset:
M readme.txt
$ git status
On branch master
Changes not staged for commit:
(use “git add …” to update what will be committed)
(use “git checkout – …” to discard changes in working directory)
modified: readme.txt
no changes added to commit (use “git add” and/or “git commit -a”)



3.4)这个时候又有个疑问,我只是把readme.txt从add后的暂存区给撤销回来了,文件并没有改变的;想要把文件的修改也撤回,就要使用git checkout -- <file>命令了:

$ git checkout – readme.txt

$ cat readme.txt
I am a test engineer.
I want to study Git.

$ git status
On branch master
nothing to commit, working tree clean


补充:一个文件已经被提交到了版本库,有时候我们在工作区误删了某个文件(rm或手动),这个时候版本库中还是有这个文件的,就可以通过git checkout -- <file>命令来”找回“;
如果真的想要从版本库中将文件删除,就要用到git rm和git commit命令了

1)没错,一般穿越的电影里到最后总是会找到方法返回未来的,git也不例外,除了可以回到过去(版本回退),也可以返回未来(回到新版本);
这里我们还是要借助于commit id来做,但是回退后再用git log已经看不到未来时期的定位坐标了(commit id):

$ git log
commit 64f5cedd48745267e4e161c57f126a9230344339 (HEAD -> master)
Author: qinzhen 376057520@qq.com
Date: Thu Sep 19 16:05:40 2019 +0800

study git


2)这个时候就要用到git reflog命令了,记录你之前走过的路:

$ git reflog
64f5ced (HEAD -> master) HEAD@{0}: reset: moving to 64f5ced
9c32701 HEAD@{1}: commit: I can fly
64f5ced (HEAD -> master) HEAD@{2}: reset: moving to HEAD^
7582a45 HEAD@{3}: commit: very much
64f5ced (HEAD -> master) HEAD@{4}: commit: study git



在这里就可以看到之前I can fly 的commit id;这里顺便提一句,上面说了commit id不用写全部,写前面一部分,但是不确定具体写几位,这里看到git的log也只记录了前7位,那就姑且算7位吧。。。

有了commit id就等于获得了返回未来的坐标信息和方法,电影也差不多到了大结局的时候了,本文也就要结束了,来个收尾:

$ git reset --hard 9c32701
HEAD is now at 9c32701 I can fly

$ cat readme.txt
I am a test engineer,I can fly.
I want to study Git.

$ git status
On branch master
nothing to commit, working tree clean



关于《穿越时空的 Git》科幻电影还在继续更新中,敬请期待哦~
![](https://ceshiren.com/uploads/default/original/3X/9/e/9ea874c9cde3f715c32090b034228c80db994755.jpeg)
![](https://ceshiren.com/uploads/default/original/3X/4/9/49aa242692d4d43b745299bca69c193d6c3be14d.jpeg)
![](https://ceshiren.com/uploads/default/original/3X/9/a/9af4c4a8a32803dc64afe6c7db012fcfd24316ac.jpeg)
![](https://ceshiren.com/uploads/default/original/3X/8/d/8db27752feb75cb6d73e479b153bc3f52e956350.jpeg)
![](https://ceshiren.com/uploads/default/original/3X/c/3/c3ebf3d34fd3c42aa8d8307d4fa39138f57d5863.jpeg)
![](https://ceshiren.com/uploads/default/original/3X/5/4/54073f513ba1d729d3c3718590a1d0545dc51948.jpeg)
![](https://ceshiren.com/uploads/default/original/3X/0/2/02771dafe9d25501a05bbdddb791dd8a4907ddd4.jpeg)
![](https://ceshiren.com/uploads/default/original/3X/c/0/c01b0012ba46a79a045e3b0000717af1570cf12e.jpeg)
![](https://ceshiren.com/uploads/default/original/3X/6/f/6fcac3689a1c7947d88cb9b9710b58db40a57ee7.jpeg)
![](https://ceshiren.com/uploads/default/original/3X/e/c/ec6256d8026156d5284d6e9e0a16b51cb6d344de.jpeg)
[原文链接](https://mp.weixin.qq.com/s?__biz=MzU3NDM4ODEzMg==&mid=2247485808&idx=1&sn=513ca56213089bc89189a711a717dd6c&chksm=fd326bbbca45e2adce0de6190c841aefc15213269d5b5eba966d2b8be245f4496c5f62064e45#rd) 

> 获取更多技术文章分享和免费资料领取点击链接:https://qrcode.testing-studio.com/f?from=CSDN&unid=1647834258&url=https://ceshiren.com/t/topic/16586
> > [获取更多技术文章分享和免费资料领取点击链接](https://qrcode.testing-studio.com/f?from=CSDN&unid=1647834258&url=https://ceshiren.com/t/topic/16586)说了这么多废话,其实我们平常说的仓库就是版本库,版本库又名仓库,英文名叫repository,相信很多用GitHub的小伙伴经常看到这个单词;

我就简单的把它理解成一个目录文件夹,里面可以放各种文件,和平常的使用管理一样,可以删除、修改;但是Git的”文件夹“更强大一点,它记性好-Git可以"记住"整个管理的历史,还能”存档“。
如何创建一个版本库,很简单:
- 1)选择一个路径(you like just ok!),创建一个空目录
- ```
- $ mkdir mygit
- $ cd mygit
- $ pwd
- /Users/qinzhen/mygit  #这里就是我的Mac上创建的仓库地址了
    • 2)仓库地址创建好了,现在就是一个普通的文件夹,后使用git init命令将它变成”Git文件夹“,也就是把这个目录变成Git可以管理的仓库
  • $ git init
  • Initialized empty Git repository in /Users/qinzhen/mygit/.git/


它会提示说在你的目录下创建了一个空的Git仓库,并且目录下多了一个.git,这个时候就算创建完成了。

在看命令之前先来用一张图了解几个概念,可以方便理解和记忆:
- 工作区(Working Directory)
- - 临时仓库(暂存区,Staging Area)
- - Git仓库(Repository)
- 我们就是先在工作区进行文件的编辑操作;然后add到临时仓库,可以add多个;最后再commit一起提交到仓库中。
- 接下来正式进入实操:
- 1)在mygit路径下,创建文件readme.txt,输入以下内容:
- ```
- I want to study Git

2)利用git add命令将文件提交到临时仓库(运行成功不会输出任何消息,看不到输出不要慌~)

$ git add readme.txt

3)再用git commit命令将文件从暂存区提交到仓库去

localhost:mygit qinzhen$ git commit -m "study git"
[master 64f5ced] study git
1 file changed, 2 insertions(+), 2 deletions(-)

命令解释:

-m : 添加注释,对本次提交写一个说明
1 file changed :
1个文件被改变,也就是readme.txt;
2 insertions(+):
2行插入了内容,也就是我们输入的两行内容
2 deletions(-):
2行内容缺失了,因为我是把readme.txt文件里原有的内容删除后添加的内容,
所以会有次改动提示,若是完全新建的就只会有添加的记录

    • 1)我们先用git status查看当前仓库的状态
  • localhost:mygit qinzhen$ git status
  • On branch master
  • nothing to commit, working tree clean

现在表示在一个master分支上没有可提交的东西,工作目录当前是干净的
- 
- - 2)修改readme.txt文件:
- ```
- I want to study Git very much.
    • 3)再使用git status查看
  • localhost:mygit qinzhen$ git status
  • On branch master
  • Changes not staged for commit:
  • (use “git add …” to update what will be committed)
  • (use “git checkout – …” to discard changes in working directory)
    modified: readme.txt
    no changes added to commit (use “git add” and/or “git commit -a”)

这时候可以看到文件已经被修改了,但是并没有被add和commit;
- 
- - 4)再使用git diff(different)命令来查看当前操作和之前的操作有何区别之处,修改了哪里:
- ```
- localhost:mygit qinzhen$ git diff
- diff --git a/readme.txt b/readme.txt
- index 225e15a..8080bd8 100644
- --- a/readme.txt
- +++ b/readme.txt
- @@ -1,2 +1,2 @@
-  I am a test engineer.
- -I want to study Git.
- +I want to study Git very much.

可以看到我在第二行增加了very much

    • 1)我们先将刚才修改好的文件提交到仓库中:
  • $ git add readme.txt
  • $ git commit -m “very much”
  • [master 7582a45] very much
  • 1 file changed, 1 insertion(+), 1 deletion(-)

- 
- - 2)我们再使用git log命令来看看之前都干了些什么:
- ```
- $ git log
- commit 7582a45a1acd9f5540f381d6e9bb7c9d38e74348 (HEAD -> master)
- Author: qinzhen <376057520@qq.com>
- Date:   Thu Sep 19 16:48:31 2019 +0800
    very much
commit 64f5cedd48745267e4e161c57f126a9230344339
Author: qinzhen <376057520@qq.com>
Date:   Thu Sep 19 16:05:40 2019 +0800

    study git

在git log命令后,我们可以看到之前的提交commit历史,每一次提交都分配了唯一的commit id,这个id就是我们回到过去的关键,就相当与科幻电影中回到过去的某个时期

3.1)HEAD——现在,我如果想回到study git的”时期“,可以使用git reset --hard HEAD^

$ git reset --hard HEAD^
HEAD is now at 64f5ced study git

$ cat readme.txt
I am a test engineer.
I want to study Git.

这个时候我们可以看到,已经成功的回到了study git的”时期“,very much已经消失不见
命令解释:

如果回到过去不好理解的话,也可以理解为存档,本人小时候喜欢玩一款电脑游戏叫做红色警戒,
打任务战的时候每过一关前就会存档一次,这样就方便”死“了之后可以回到指定关卡重新再来
^代表上一个存档,^^代表上上个存档,如果想反会至上100个版本的话可以直接使用HEAD~100果回到过去

3.2)commit id——现在再修改文件,在第一行添加I can fly,然后add、commit:

I am a test engineer,I can fly.
I want to study Git.

$ git add readme.txt
$ git commit -m "I can fly"
[master 9c32701] I can fly
 1 file changed, 1 insertion(+), 1 deletion(-)

git log 查看修改提交日志

$ git log
commit 9c327016eec10a6db7f9b75ecb705df417b6508c (HEAD -> master)
Author: qinzhen <376057520@qq.com>
Date:   Thu Sep 19 17:06:10 2019 +0800

    I can fly
commit 64f5cedd48745267e4e161c57f126a9230344339
Author: qinzhen <376057520@qq.com>
Date:   Thu Sep 19 16:05:40 2019 +0800

    study git

上面说了可以利用commit id回到过去,现在咱们就来试试;使用git reset --hard 64f5ce…命令:

$ git reset --hard 64f5ced
HEAD is now at 64f5ced study git

$ cat readme.txt
I am a test engineer.
I want to study Git.

从上面的结果可以看到,我们已经通过commit id成功回到了过去,回到了那个没有”I can fly“的年代;可以注意到的一点是,在写commit id的时候并没有写全,只是写了前面的一部分,git就可以找到了;
额。。。肯定有人要问具体是几位,说实话~我也不知道0.0,也没有专门去研究过,前四五位?六七位?七八位?达到使用要求就好啦,能保证id唯一,稍微多复制几个就可以了。。。

3.3)回到add前的年代——仅add文件到了暂存区,并没有commit;感觉好像是进入到了add的另一重空间,在未来也找不到他,那想回到原来的”时期“的话,就可以使用git reset HEAD 把file丢掉

现在我的readme.txt文件内容如下,并且已经add到了暂存区:

I am a test engineer.I can fly!
I want to study Git.

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
  modified:   readme.txt

使用git reset HEAD readme.txt命令将修改从add撤销回来

$ git reset HEAD readme.txt
Unstaged changes after reset:
M  readme.txt
$ 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")


3.4)这个时候又有个疑问,我只是把readme.txt从add后的暂存区给撤销回来了,文件并没有改变的;想要把文件的修改也撤回,就要使用git checkout – 命令了:

$ git checkout -- readme.txt

$ cat readme.txt
I am a test engineer.
I want to study Git.

$ git status
On branch master
nothing to commit, working tree clean


补充:一个文件已经被提交到了版本库,有时候我们在工作区误删了某个文件(rm或手动),这个时候版本库中还是有这个文件的,就可以通过git checkout – 命令来”找回“;
如果真的想要从版本库中将文件删除,就要用到git rm和git commit命令了

1)没错,一般穿越的电影里到最后总是会找到方法返回未来的,git也不例外,除了可以回到过去(版本回退),也可以返回未来(回到新版本);
这里我们还是要借助于commit id来做,但是回退后再用git log已经看不到未来时期的定位坐标了(commit id):

$ git log
commit 64f5cedd48745267e4e161c57f126a9230344339 (HEAD -> master)
Author: qinzhen <376057520@qq.com>
Date:   Thu Sep 19 16:05:40 2019 +0800

    study git

2)这个时候就要用到git reflog命令了,记录你之前走过的路:

$ git reflog
64f5ced (HEAD -> master) HEAD@{0}: reset: moving to 64f5ced
9c32701 HEAD@{1}: commit: I can fly
64f5ced (HEAD -> master) HEAD@{2}: reset: moving to HEAD^
7582a45 HEAD@{3}: commit: very much
64f5ced (HEAD -> master) HEAD@{4}: commit: study git

在这里就可以看到之前I can fly 的commit id;这里顺便提一句,上面说了commit id不用写全部,写前面一部分,但是不确定具体写几位,这里看到git的log也只记录了前7位,那就姑且算7位吧。。。

有了commit id就等于获得了返回未来的坐标信息和方法,电影也差不多到了大结局的时候了,本文也就要结束了,来个收尾:

$ git reset --hard 9c32701
HEAD is now at 9c32701 I can fly

$ cat readme.txt
I am a test engineer,I can fly.
I want to study Git.

$ git status
On branch master
nothing to commit, working tree clean

原文链接

获取更多技术文章分享和免费资料领取点击链接:https://qrcode.testing-studio.com/f?from=CSDN&unid=1647832863&url=https://ceshiren.com/t/topic/16586

获取更多技术文章分享和免费资料领取点击链接

Logo

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

更多推荐