git 基本使用
### git 的基本使用
安装
-
安装完成后,在开始菜单里找到“Git”->“Git Bash”
-
安装完成后,还需要最后一步设置,在命令行输入:
- git config --global user.name "Your Name"
- git config --global user.email "email@example.com"
-
查看全局配置
- git config --list
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。你也许会担心,
如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的。
注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
-global 表示将设置应用于当前用户的所有 Git 仓库。如果你想对某个特定的仓库进行设置,可以省略 --global 参数,并在该仓库的根目录下执行上述命令。
- 选择一个目录文件夹 在这个目录下打开gitBash
- 通过 git init 命令把这个目录变成git可以管理的仓库
概念
-
工作区
- 就是你在电脑里能看到的目录,git init时的文件夹就是一个工作区
-
版本库(Repository)
-
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
-
git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。
-
-
删除文件
- git rm test.txt
-
恢复一个文件
- git checkout -- test.txt
-
本地库关联到远程库
- git remote add origin git@github.com:wJiaLiang/vue-cli4.git
SSH警告 当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告; 这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。
-
从远程克隆仓库
分支管理
每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支
- git checkout -b dev (创建病切换到dev 分支);
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
git branch dev
git checkout dev
- git branch命令会列出所有分支,当前分支前面会标一个*号
- git merge命令用于合并指定分支到当前分支
- git branch -d dev (删除dev分支)
- git switch master (直接切换分支到master)
- git clone -b dev https://www.abc-tem.git (指定 拉取 dev 分支)
- 总结:
- 查看分支: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
标签管理
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。
tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。
- 创建标签
- 切换到某个分支下命令:get tag name
- 如:get tag v1.0.0
默认标签是打在最新提交的commit上的。有时候,如果忘了打标签,比如,现在已经是周五了,但应该在周一打的标签没有打,怎么办?
方法是找到历史提交的commit id,然后打上就可以了:
比方说要对add merge这次提交打标签,它对应的commit id是f52c633,敲入命令:git tag v0.9 f52c633
- 注意,标签不是按时间顺序列出,而是按字母排序的。可以用git show tagname 查看标签信息:
- 还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:
- git tag -a v0.1 -m "version 0.1 released" 1094adb
标签删除
- git tag -d v0.1
因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除
-
如果要推送某个标签到远程,使用命令git push origin tagname
-
git push origin v1.0
-
或者,一次性推送全部尚未推送到远程的本地标签:
-
git push origin --tags
-
如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
-
git tag -d v0.9
-
然后,从远程删除。删除命令也是push,但是格式如下:
-
git push origin :refs/tags/v0.9
-
本地仓库关联到远程仓库
- git remote add origin https://github.com/wJiaLiang/vue-cli4.git
- 如果在使用命令git remote add时报错
- 这说明本地库已经关联了一个名叫origin的远程库,此时,可以先用git remote -v查看远程库信息:
- 我们可以删除已有的GitHub远程库: git remote rm origin
- 关联多个远程库 如: 即关联到gitee 有关联到 gitHub;
- git给远程库起的默认名称是origin,如果有多个远程库,我们需要用不同的名称来标识不同的远程库。
- git remote add origin https://github.com/wJiaLiang/vue-cli4.git
- git remote add origin https://gitee.com/wJiaLiang/vue-cli4.git
- 分别推送到不同的远程库 git push github master 和 git push gitee master
忽略特殊文件
-
在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件
-
忽略文件的原则是:
- 1 忽略操作系统自动生成的文件,比如缩略图等;
- 2 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件
- 3 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
-
有些时候,你想添加一个文件到Git,但发现添加不了,原因是这个文件被.gitignore忽略了:如:git add App.class
-
可以用-f强制添加到Git: git add -f App.class
-
或者你发现,可能是.gitignore写得有问题,需要找出来到底哪个规则写错了,可以用git check-ignore命令检查:
git check-ignore -v App.class
.gitignore:3:*.class App.class
Git会告诉我们,.gitignore的第3行规则忽略了该文件,于是我们就可以知道应该修订哪个规则。
搭建git服务器
Source Tree 使用
Git有很多图形界面工具,这里我们推荐SourceTree,它是由Atlassian开发的免费Git图形界面工具,可以操作任何Git库。
首先从官网下载SourceTree并安装,然后直接运行SourceTree。
补充
- 删除本地文件更新到线上:
- 在source tree 中删除后 还是会和其他文件,新建文件一起要加入, 暂存区,但是文件显示成灰色,直接提交更新到远程后,远程仓库也就删除了