Git学习笔记一

Git

分布式版本控制系统,CVS及SVN都是集中式的版本控制系统。

版本库:仓库(repository),可以理解成为一个目录,目录都可以可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时间可以"还原"。

1.创建并使用

1.选择一个文件夹,创建一个空目录。(这里我选择的是桌面的git目录下创建learn)

$ cd /Users/apple/Desktop/git/Learn

用pwd可显示当前目录

2.通过git init命令把目录变成Git可以管理的仓库

$git init
Initialized empty Git repository in /Users/apple/Desktop/git/Learn/.git/

这时候Git已经把仓库建好了,而且是一个空的仓库(empty Git repository),这时候Learn的目录下会多出一个.git目录。这个目录用来跟踪管理版本库,不可以手动修改。

如果没有看到.git目录,是因为这个目录默认隐藏,用ls -ah命令就可以看见

所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。

3.添加内容

在Learn目录下(或者子目录)添加一个文件。比如是readme.md

  • 首先,用git add告诉Git,把文件添加到仓库

    $ git add readme.md
    

    执行之后没有任何显示。

  • 其次,用git commit告诉Git,把文件提交给仓库。

$ git commit -m "wrote a readme file"
[master (root-commit) 2d9e62d] wrote a readme file
 1 file changed, 158 insertions(+)
 create mode 100644 readme.md

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

git commit命令执行成功后会告诉你,1 file changed:1个文件被改动(我们新添加的readme.txt文件);158 insertions:插入了158行内容。

  • commit可以一次提交很多文件,所以你可以多次add不同的文件

4.git status命令可以让我们时刻掌握仓库当前的状态,git diff顾名思义就是查看difference,显示的格式正是Unix通用的diff格式,按q即可退出当前查询模式。

提交修改还是用git add ,可以先用git status查看状态,然后用git commit -m提交。

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

	modified:   readme.md
$ git commit -m "second"
[master 0679a3f] second
 1 file changed, 63 insertions(+), 24 deletions(-)

5.git log命令显示从最近到最远的提交日志

$ git log
commit 0679a3f9a7a890c7d2e41da20412ea8c24b5819e (HEAD -> master)
Author: ShuchenHuang <shuchenhuang@163.com>
Date:   Wed May 22 22:56:22 2019 +0800

    second

commit 2d9e62d027cca9bea777fe4ac28799047212d231
Author: ShuchenHuang <shuchenhuang@163.com>
Date:   Wed May 22 22:38:51 2019 +0800

    wrote a readme file

这里我提交了两次。

可以用git log --pretty=oneline

$ git log --pretty=oneline
0679a3f9a7a890c7d2e41da20412ea8c24b5819e (HEAD -> master) second
2d9e62d027cca9bea777fe4ac28799047212d231 wrote a readme file

一大串类似0679a...的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示。因为Git是分布式的版本控制系统,大家同时在一个版本库里面进行工作,1,2,3的版本号无法满足我们的需求。

在Git中,用HEAD表示当前版本,也就是最新的提交0679a3...,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

进行版本回退,可以使用git reset --hard HEAD^

$ git reset --hard HEAD^
HEAD is now at 2d9e62d wrote a readme file
$ git log
commit 2d9e62d027cca9bea777fe4ac28799047212d231 (HEAD -> master)
Author: ShuchenHuang <shuchenhuang@163.com>
Date:   Wed May 22 22:38:51 2019 +0800

    wrote a readme file

如果想要我刚才不要的版本,就可以通过查找命令行窗口找到版本号。版本号没必要写全,前几位就可以了,Git会自动去找,但也不能只写前两位。

$ git reset --hard 0679a3f9
HEAD is now at 0679a3f second

Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD指针指向进行改变而已。

也可以使用git reflog进行查看。

$ git reflog
0679a3f (HEAD -> master) HEAD@{0}: reset: moving to 0679a3f9
2d9e62d HEAD@{1}: reset: moving to HEAD^
0679a3f (HEAD -> master) HEAD@{2}: commit: second
2d9e62d HEAD@{3}: commit (initial): wrote a readme file

2.工作区和暂存区

Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。

2.总结

1.创建新项目

1.创建新目录,并打开。

2.初始化Git仓库:git init

3.添加文件,分两步:

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

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

2.常用命令

1.初始化Git仓库:git init

2.添加文件:git add <file>

3.提交文件:git commit -m <message>

4.要随时掌握工作区状态 ,使用git status命令

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

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

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

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

参考资料:https://www.liaoxuefeng.com/wiki/896043488029600

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值