Git学习笔记1——时光机穿梭

❤非常感谢廖雪峰老师的教程!!![www.liaoxuefeng.com]
版本库/仓库(repository),可以理解成一个目录,这个目录里面的每个文件的修改、删除,Git都能跟踪,任何时刻都可以追踪历史或“还原”。

# 命令行基础
$ mkdir learngit  # 创建目录
$ cd learngit # 改变目录至
$ pwd  # 显示当前目录
/Users/shayi/learngit
$ touch readme.txt  # 先创建个文件
# 再手工在文件里写两行字(不会用命令行)如下
# Git is a version control system.
# Git is free software.
$ ls -ah  # 用ls -ah命令显示默认隐藏的git目录
./  ../  .git/
$ cat readme.txt # 查看文件内容
Git is a distributed version control system.
Git is free software.

❤用 git init 把这个目录变成Git可以管理的仓库

$ git init
Initialized empty Git repository in /Users/shayi/learngit/.git/

❤把文件添加(add)到仓库;
准确的讲:把修改放入暂存区(index),准备提交

$ git add readme.txt  # 把文件添加到仓库
# 若文件不存在会显示下文:
fatal: pathspec 'readme.txt' did not match any files  # 失败

❤提交(commit)文件到仓库;
准确的讲:把放在暂存区(index)的修改提交到当前分支(master)

$ git commit -m "wrote a readme file"
# -m后面输入的是本次提交的说明,可以输入任意内容,最好是注释性的
[master 556b2ed] wrote a readme file
 1 file changed, 2 insertions(+)

❤修改 readme.txt 之后查看文件状态(status)

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   readme.txt  # 文件已经被修改
# 但还没有提交
no changes added to commit (use "git add" and/or "git commit -a")

❤查看文件修改的内容,查看与原文件的不同(difference)

$ git diff
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 HEAD -- readme.txt可看工作区和版本库里最新版本的区别:

❤显示修改记录(log),显示从最近到最远的提交日志(log)

$ git log
commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
Author: shayito <675626739@qq.com>                            # HEAD 表示当前版本
Date:   Sun Dec 1 20:51:24 2019 +0800
    append GPL
commit e475afc93c209a690c39c13a46716e8fa000c366
Author: shayito <675626739@qq.com>
Date:   Fri Nov 18 21:03:36 2019 +0800
    add distributed
... # 下略
$ git log --pretty=oneline  # 单行简略输出
1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPL
e475afc93c209a690c39c13a46716e8fa000c366 add distributed
... # 下略

❤需要友情提示的是,你看到的一大串类似1094adb...的是commit id(版本号),
和SVN不一样,Git的commit id不是1,2,3……递增的数字,
而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,
而且你看到的commit id和我的肯定不一样,以你自己的为准。
为什么commit id需要用这么一大串数字表示呢?
因为Git是分布式的版本控制系统,当多人在同一个版本库里工作,
如果大家都用1,2,3……作为版本号,那肯定就冲突了。

❤回退到以前的版本(hard参数以后解释)

$ git reset --hard HEAD^ # 从当前版本回退到上一个版本
# 上上个版本:HEAD^^,上100个版本:HEAD~100
HEAD is now at e18d1c5 add distributed
$ git log
... # 这时发现最新一个版本已经找不到了?解决方法如下:

❤找回最新版本:回翻命令行窗口(git bash),找到最后一个版本号,
再用git reset --hard 版本号

$ git reset --hard 1094a  
# 输入前几位即可,git 会自动去找(位数也不要太少)
HEAD is now at 83b0afe append GPL
$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
# 最后一个版本又回来了

❤找回最新版本(如果关掉了命令行窗口)的方法如下:

$ git reflog # git 记录了每一次命令,可以用 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

❤Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。
名词解释:
❤工作区(Working Directory):就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区


image.png

❤版本库(Repository):工作区有一个隐藏目录.git,这是Git的版本库。
Git的版本库里最重要的就是❤暂存区stage/index、❤自动创建的第一个分支master、❤指向master的HEAD指针。


image.png

分支和HEAD的概念以后再讲。
把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放(add)到暂存区(index),然后,一次性提交(commit)暂存区的所有修改到分支(master)。

❤为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件。[https://www.liaoxuefeng.com/wiki/896043488029600/897884457270432]

[https://www.liaoxuefeng.com/wiki/896043488029600/897889638509536]

❤撤销修改(若修改还没添加(not add)到暂存区):恢复(restore)
(emmmm git checkout -- readme.txt是啥和restore啥区别没弄懂。。。)

$ git restore readme.txt
$ cat readme.txt
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.

❤撤销修改(若修改已经添加(add)到了暂存区):重置(reset)+恢复(restore)

$ git reset HEAD readme.txt
Unstaged changes after reset:
M   readme.txt
$ git status
On branch master
nothing to commit, working tree clean

❤若修改已经从暂存区提交到了版本库,怎么办呢?还记得版本回退一节吗?可以回退到上一个版本。不过,这是有条件的,就是你还没有把自己的本地版本库推送到远程。还记得Git是分布式版本控制系统吗?我们后面会讲到远程版本库,一旦你把stupid boss提交推送到远程版本库,你就真的惨了……

$ rm test.txt  # 普通删除

❤删除后的彻底删除(从版本库中删除)

$ 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 -- test.txt
# git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,135评论 6 514
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,317评论 3 397
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,596评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,481评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,492评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,153评论 1 309
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,737评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,657评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,193评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,276评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,420评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,093评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,783评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,262评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,390评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,787评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,427评论 2 359