廖雪峰的Git教程笔记(持续更新)

目录

1.Git简介

集中式和分布式版本控制系统有什么区别呢?

安装Git

创建版本库

把文件添加到版本库当中

2.时光机穿梭

版本回退

工作区和暂存区

管理修改

撤销修改(还需理解)

删除文件(还需理解)



1.Git简介

 

Git是目前世界上最先进的分布式版本控制系统。

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

集中式和分布式版本控制系统有什么区别呢?

集中式版本控制系统,版本库是集中存放在中央服务器的。集中式版本控制系统最大的毛病就是必须联网才能工作。

分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库。

安装Git

直接下载安装包,默认安装即可。

安装完成之后设置用户名和密码:

$ git config --global user.name "H-PAI"
$ git config --global user.email "1004128190@qq.com"

创建版本库

版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

1.选择一个合适的地方(直接选择D盘或者E盘的根目录)

2.命令mkdir创建一个空目录(创建只后 系统会直接在之前选择的目录里创建该目录)

3.命令git init对空目录进行初始化操作,完成仓库的创建

$ mkdir learnGit
$ cd learnGit/
$ git init
Initialized empty Git repository in D:/learnGit/.git/

把文件添加到版本库当中

1.新建一个文件readme.txt,并把文件放在learnGit文件夹下面

2.命令git add告诉Git把文件添加到仓库,注意,可反复多次使用,添加多个文件。(执行完之后没有任何显示)

3.命令git commit告诉Git把文件提交到仓库。(-m 后面输入的是本次提交的说明,可以输入任意内容)

$ git add readme.txt
$ git commit -m "wrote a readme file"
[master (root-commit) 091ecf2] wrote a readme file
 1 file changed, 2 insertions(+)
 create mode 100644 readme.txt

2.时光机穿梭

命令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

命令git diff可以查看当前版本与之前做了哪些修改。

$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index b6dec33..71747a4 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,3 +1,4 @@
 Git is a version control system.
 Git is free software.
-Git is a distributed version control system.
\ No newline at end of file
+Git is a distributed version control system.
+add one line.
\ No newline at end of file

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

$ git log
commit 4354f6fa81b6746750cf6c23f28a21d0b1674f36 (HEAD -> master)
Author: H-PAI <1004128190@qq.com>
Date:   Tue Jul 31 09:00:52 2018 +0800

    append GPL

commit 1f569826b0b6a9d4db4d2b5eb790d7c443263d63
Author: H-PAI <1004128190@qq.com>
Date:   Tue Jul 31 08:39:26 2018 +0800

    add a line

commit 5ad156c71765be92d24903dd8820f4dbca8c16e9
Author: H-PAI <1004128190@qq.com>
Date:   Tue Jul 31 08:33:41 2018 +0800

    change readme.txt

commit 091ecf2b609e72b82d50dc488ded1ff4be4b0b32
Author: H-PAI <1004128190@qq.com>
Date:   Mon Jul 30 20:36:07 2018 +0800

    wrote a readme file

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

$ git log --pretty=oneline
4354f6fa81b6746750cf6c23f28a21d0b1674f36 (HEAD -> master) append GPL
1f569826b0b6a9d4db4d2b5eb790d7c443263d63 add a line
5ad156c71765be92d24903dd8820f4dbca8c16e9 change readme.txt
091ecf2b609e72b82d50dc488ded1ff4be4b0b32 wrote a readme file

版本回退

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

因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。(版本号没必要写全,前几位就可以了,Git会自动去找。

$ git reset --hard HEAD^
HEAD is now at 1f56982 add a line

$ cat readme.txt
Git is a version control system.
Git is free software.
Git is a distributed version control system.
add one line.


$ git reset --hard 4354f6
HEAD is now at 4354f6f append GPL

$ cat readme.txt
Git is a version control system.
Git is free software distributed under the GPL.

命令git reflog用来记录你的每一次命令。

$ git reflog
4354f6f (HEAD -> master) HEAD@{0}: reset: moving to 4354f6
1f56982 HEAD@{1}: reset: moving to HEAD^
4354f6f (HEAD -> master) HEAD@{2}: commit: append GPL
1f56982 HEAD@{3}: commit: add a line
5ad156c HEAD@{4}: commit: change readme.txt
091ecf2 HEAD@{5}: commit (initial): wrote a readme file

工作区和暂存区

工作区(Working Directory):就是你在电脑里能看到的目录。

版本库(Repository):工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的。

管理修改

Git跟踪并管理的是修改,而非文件。

操作:第一次修改 -> git add -> 第二次修改 -> git commit

结果:第二次的修改没有被提交

原因分析:我们前面讲了,Git管理的是修改,当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。

解决方案:你可以继续git addgit commit,也可以别着急提交第一次修改,先git add第二次修改,再git commit,就相当于把两次修改合并后一块提交了。

解决操作:第一次修改 -> git add -> 第二次修改 -> git add -> git commit

撤销修改(还需理解)

删除文件(还需理解)

首先添加一个新文件(textAdd.txt)到Git并提交。一般情况下,你通常直接在文件管理器(windows窗口)中把没用的文件删了,或者用rm命令删了。这个时候,Git知道你删除了文件。因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了。

$ rm testAdd.txt
$ 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:    testAdd.txt

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

情况一:删错了

解决方案:因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本

$ git checkout -- testAdd.txt

情况二:确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit

$ git rm testAdd.txt
rm 'testAdd.txt'
$ 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:    testAdd.txt

no changes added to commit (use "git add" and/or "git commit -a")
$ git commit -m "remove testAdd.txt"
[master 4bfe9e6] remove testAdd.txt
 1 file changed, 5 deletions(-)
 delete mode 100644 testAdd.txt

删除有两种方式

1、工作区内"rm 文件名",然后"git rm 文件名",然后"git commit -m '备注'"

2、直接使用"git rm 文件名",然后"git commit -m '备注'"

实验结果:

1、工作区内"rm 文件名" 只是删除工作区内容,暂存区内容还是在的,在"git rm 文件名"操作之前可通过"git checkout --文件名"从暂存区进行恢复。

2、"git rm 文件名"是既删除工作区内容也删除暂存区内容的,所以在"git commit -m '备注'"操作之前可以通过"git checkout HEAD -- 文件名"从版本库进行恢复,当然你要是直接用git reset HEAD^也行但是可能会影响你其他修改但是未提交的其他内容的。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 廖雪峰git教程是一份数以万计程序员都曾参考的免费学习资料。这份教程通过简明易懂的方式讲解Git的基本知识,让初学者可以轻松地理解和学习。 这份教程的内容涵盖了Git版本控制系统的基本概念,如何从GitHub上克隆Git仓库、如何创建和管理分支、如何提交代码、如何处理冲突等等。阅读教程时,读者可以实践每一步操作,从而更好地理解Git的工作过程。 另外,廖雪峰教程对于Git命令的讲解也非常详细,每个命令的参数和用法都被阐述清晰。此外,教程还提供了Git常见问题的解决方案,包含实用的技巧和经验分享,有助于读者更好地应用Git进行项目开发和管理。 总之,廖雪峰git教程是一份非常好的Git入门学习资料,鼓励每一个想要学习Git版本控制的程序员都可以尝试阅读和实践。 ### 回答2: 廖雪峰Git教程是一份详细的关于Git版本控制系统的入门教程,对想要学习Git的初学者而言是一份非常宝贵的资源。该教程以清晰明了的语言和生动的实例介绍了Git版本控制器的基本概念、使用方法和实践技巧,并且针对常见的问题和困惑给予详尽地解答和讲解。 该教程的内容从简单到复杂、从基础到高级逐步展开,每一章节都配有丰富的代码实例和可视化的流程图示,在让读者快速掌握Git的基本操作和特性的同时,还注意到了实际应用中的注意事项,很好地把理论知识和实际操作结合起来了。 廖雪峰Git教程PDF版本免费提供下载,方便读者在离线的环境下练习和学习,同时该教程还提供了在线版、视频教程、代码示例等资源,扩展了多种学习方式的选择。 总而言之,廖雪峰Git教程是一份全面、易于理解和实用的Git学习入门资料,对于想要学习或使用Git的人而言是必不可少的一份参考资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值