Git
- 基于Ubuntu18.04 学习
- Git最初由linus编写
- Git是编程必备的一个基础工具
创建版本库
版本库又名仓库,英文名repository,一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
准备 |
设置用户名和邮箱
-
为什么要配置用户名和邮箱?
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址(名字和邮箱都不会进行验证),这样远程仓库才知道哪次提交是由谁完成的。你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先Git相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的。
git config --global user.email "710418455@qq.com" |
添加文件
- 先在版本库文件夹下创建一个txt文件或者md文件
第一步,用命令git add告诉Git,把文件添加到仓库: |
-m
后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。- add和commit分开是为了分开添加不同的文件
- 在commit前可以多次add
修改文件
当修改了文件,可以查看当前的版本状态 |
版本回退
查看已提交的历史记录,顺序从上到下是最近到最远 |
需要友情提示的是,你看到的一大串类似1094adb…的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id和我的肯定不一样,以你自己的为准。为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。
git log --pretty=oneline |
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的
HEAD
指针,当你回退版本的时候,Git仅仅是把HEAD从指向另一个版本:
用来记录你的每一次命令 |
工作区和暂存区
Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。
- 工作区就是git init的文件夹
- 暂存区实际上就是git add后,将修改的内容添加到.git的文件夹的待提交区域中
-
多次修改就要多次add,最后一起commit.没有add就只能提交stage区域的修改
-
当没有及时提交时就会报错
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")
把readme.txt文件在工作区的修改全部撤销
git checkout -- readme.txt- 一种是
readme.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态 - 一种是
readme.txt
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
git checkout -- file
命令中的--
很重要,没有--
,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout
命令。 - 一种是
-
当需要退回暂存区的修改时
git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: readme.txt
可以把stage暂存区的修改撤销掉
git reset HEAD readme.txt
Unstaged changes after reset:
M readme.txtgit reset
命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD
时,表示最新的版本。
删除文件
-
当版本库和工作区一致时,删除某一个文件
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: test.txt
no changes added to commit (use "git add" and/or "git commit -a")
如果确实要删除,
git rm test.txt
git commit -m "remove test.txt"
撤销删除
git checkout -- test.txtgit checkout
其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
Git&Github的常用命令
设置用户名和邮箱【每次进入都要设置】 |
如果有多个人协作开发,那么每个人各自从远程克隆一份就可以了。
你也许还注意到,GitHub给出的地址不止一个,还可以用
https://github.com/michaelliao/gitskills.git
这样的地址。实际上,Git支持多种协议,默认的git://
使用ssh,但也可以使用https
等其他协议。使用
https
除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh
协议而只能用https
。
Git本地更新
|
Git分支管理
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
或者git switch <name>
创建+切换分支:git checkout -b <name>
或者git switch -c <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>