美文网首页GitHub新手入门那些事儿
Gitの创建/查看/比较/回退 day01

Gitの创建/查看/比较/回退 day01

作者: b1fd9c17864f | 来源:发表于2019-07-30 22:56 被阅读2次

创建版本库

  • 在工作目录下,初始化一个Git仓库,使用git init命令。

  • 添加文件到Git仓库,分两步:

1.使用命令git add <file>,注意,可反复多次使用,添加多个文件;

2.使用命令git commit -m <message>,完成。

git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。


时光机穿梭

  • 要随时掌握工作区的状态,使用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

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

git status命令可以让我们时刻掌握仓库当前的状态,上面的命令输出告诉我们,readme.txt被修改过了,但还没有准备提交的修改。

虽然Git告诉我们readme.txt被修改了,但如果能看看具体修改了什么内容,自然是很好的。比如你休假两周从国外回来,第一天上班时,已经记不清上次怎么修改的readme.txt,所以,需要用git diff这个命令看看:

$ 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.

git diff顾名思义就是查看difference,显示的格式正是Unix通用的diff格式,可以从上面的命令输出看到,我们在第一行添加了一个distributed单词。

小结

  • 要随时掌握工作区的状态,使用git status命令。

  • 如果git status告诉你有文件被修改过,用git diff可以查看修改内容。


版本回退

不断对文件进行修改,然后不断提交修改到版本库里,就好比玩RPG游戏时,每通过一关就会自动把游戏状态存盘,如果某一关没过去,你还可以选择读取前一关的状态。有些时候,在打Boss之前,你会手动存盘,以便万一打Boss失败了,可以从最近的地方重新开始。

Git也是一样,每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失。

实际工作中,我们脑子里怎么可能记得一个几千行的文件每次都改了什么内容,不然要版本控制系统干什么。版本控制系统肯定有某个命令可以告诉我们历史记录,在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

如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:

$ git log --pretty=oneline
1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPL
e475afc93c209a690c39c13a46716e8fa000c366 add distributed
eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file

Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
现在,我们要把当前版本append GPL回退到上一个版本add distributed,就可以使用git reset命令:

$ git reset --hard HEAD^
HEAD is now at e475afc add distributed

现在,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?
在Git中,总是有后悔药可以吃的。

当你用$ git reset --hard HEAD^回退到add distributed版本时,再想恢复到append GPL,就必须找到append GPL的commit id。

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,现在,你又可以乘坐时光机回到未来了。

小结

  • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id

  • 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

  • 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。


相关文章

  • Gitの创建/查看/比较/回退 day01

    创建版本库 在工作目录下,初始化一个Git仓库,使用git init命令。 添加文件到Git仓库,分两步: 1.使...

  • 2020-03-03

    Git回退到某个提交,回退后再恢复到回退版本 首先通过git log 查看提交的历史记录,查看commit id,...

  • git学习笔记2

    查看文件内容 cat file 查看历史版本 回退历史版本 git reset --hard HEAD^ # 回退...

  • Git版本控制

    git安装 GIT操作 【本地仓库】 创建版本库 添加本地托管(暂存)文件 -对比差异 查看提交日志 版本回退 工...

  • Git和Github相关操作

    设置git用户 git初始化 添加到仓库 查看仓库状态 查看文件更改 查看历史记录 查看回退历史 回退版本 生成s...

  • Git回退到历史版本

    git log查看commit历史 git reset回退到历史版本

  • git

    1.创建版本库 2.版本回退 回退之后,利用git log查看提交的历史版本,发现只有一个了,纳尼... 如果我们...

  • Git创建仓库repository

    创建文件夹 初始化仓库(把文件夹变成Git可以管理的仓库) 查看状态 创建文件 上传文件 修改文件 版本回退 查看...

  • git 自用

    $ git reset --hard HEAD^版本回退git status 查看状态git log 打印版本...

  • Git时光机

    时光机 先序 git status 查看当前仓库状态git diff xxxxx 查看修改 版本回退 ** HE...

网友评论

    本文标题:Gitの创建/查看/比较/回退 day01

    本文链接:https://www.haomeiwen.com/subject/ujfarctx.html