文章目录
Git
Git作为一个开源的分布式版本控制系统,与CVS、SVN等集中式版本控制系统不同的是,它的版本库不是集中存在中央服务器的,而是采用分布式管理让每个人电脑上都有一个完整的版本库,***Git***及其强大的分支管理能让多方修改后的版本库进行合并,显然安全性要比集中式版本控制系统高。
Git的安装配置(Win10)
在Win10上使用Git,可以从Git官网直接下载安装程序,然后按默认选项安装即可。
安装后通过以下命令查看,如果显示版本号那就是安装成功了。
$ git --version
配置文件为~/.gitconfig
,执行任何Git配置命令后文件将自动创建。
第一个要配置的文件为个人用户名称和电子邮箱地址。每次Git提交时都会引用这两条信息说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录:
$ git config --global user.name "yourname"
$ git config --gloabl user.email "youremail@example.com"
Git的基本使用
创建仓库
任意位置创建空目录后执行以下命令,就会创建一个版本库。Git 仓库会生成一个.git
目录,该目录包含了资源的所有元数据,其他的项目目录保持不变(不像 SVN 会在每个子目录生成.svn
目录,Git 只在仓库的根目录生成.git
目录)。
$ git init
拷贝仓库
要克隆一个仓库,首先必须要知道仓库的地址,然后使用git clone
命令克隆。
Git支持多种协议,包括https
,但通过ssh
支持的原生协议git
协议速度最快。
$ git clone [url]
添加文件
我们把文件添加到Git版本库的时候,是分两步执行的:
- 使用
git add
把文件修改添加到暂存区 - 用
git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支
$ git add //添加指定的文件到暂存区
$ git add . //添加所有未被忽略的文件到暂存区
$ git commit -m '描述内容'
$ git commit --amend //修改最新一次提交事件
每次对Git进行操作后,可以通过git status
命令查看结果。
$ git status
$ git status -s //获得简短的结果输出
删除文件
要从Git版本库中移除某个文件,就必须要从已跟踪文件清单中移除,然后git commit
。
$ git rm <file> //此时本地文件也也一并被删除
如果是删除之前提交到版本库的文件,但仍希望保存在当前工作目录中,可用以下命令。
$ git rm --cached <file>
文件重命名
可用以下命令移动或重命名一个文件、目录、软链接。
$ git mv
查看提交历史
$ git log
$ git log -p //以diff形式显示较详细的变动内容
$ git log --online //简短显示
$ git log --name-only //显示文件变化
$ git log --name-status //显示文件具体变化(修改/添加)
撤销修改
当你改乱了工作区中某个文件的内容,想把文件在工作区的修改全部撤销,这里有两种情况:
- 文件自修改后还没有被放在暂存区,撤销修改就回到和版本库的状态;
- 已经添加到暂存区且作了修改,则回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit
或git add
时的状态。
$ git checkout -- <file>
当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步:
- 第一步用命令
git reset HEAD <file>
,就回到了上一场景; - 第二步用
git checkout -- file
命令即可。
$ git reset HEAD <file>
Git的分支
Git通过HEAD
指针来快速指向并管理分支,从而在开发过程中实现各个模块间互不干扰,提高了开发效率。
分支管理
以下是分支的基本创建、删除、合并、查看命令:
$ git branch //查看分支
$ git branch //创建分支
$ git checkout //切换分支
$ git checkout -b //创建并切换分支
$ git merge //合并分支
$ git branch -d //删除分支
$ git branch -D //强制删除分支(慎用)
$ git branch --merged //查看已合并的分支
$ git branch --no-merged //查看未合并的分支
临时存储区域
在开发过程中,可能会出现在一个分支中进度尚未完成而文件未提交到版本库,却临时要到另一个分支修改的情况。这个时候可用git stash
命令临时保存当前分支。
$ git stash //保存当前分支
$ git stash apply //恢复分支
$ git stash drop stash@{index} //删除临时存储区域
$ git stash pop //恢复并删除分支
$ git stash list //查看临时存储区域列表
Git标签管理
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
Git的标签虽然是版本库的快照,但其实它就是指向某个commit
的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。
创建标签
$ git tag <name> //创建一个标签
$ git tag -a <name> //创建一个带注解的标签
$ git tag -a <name> -m "描述说明" //创建带有指定信息的标签
$ git tag //查看所有标签
操作标签
$ git push origin <name> //推送一个本地标签
$ git push origin --tags //推送全部未推送过的本地标签
$ git tag -d <name> //删除一个本地标签
$ git push origin :refs/tags/<name> //删除一个远程标签
Git远程仓库
由于本地Git仓库和Github仓库之间的传输是通过SSH加密的,所以需要设置SSH Key
。
- 创建SSH key,在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有
id_rsa
和id_rsa.pub
这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开GIt Bash),创建SSH key:
$ ssh-keygen -t rsa -C "youemail@example.com"
- 登陆Github,打开"Settings",在"SSH and GPG Keys"页面下
Add SSH Key
,在文本框里粘贴id_rsa.pub
的内容。
本地关联远程
当你在本地建立Git仓库时,可以在Github上建立一个仓库,并且让这两个仓库进行远程同步。
$ git remote add origin
$ git remote -v //查看当前关联情况
注:
origin
为远程仓库默认名,后面跟的是在Githu上新建立的仓库的SSH
地址。如果是从Github上clone
,上述步骤可跳过。
把本地仓库的内容推送到远程,用git push
命令,实际上是把当前分支master
推送到远程。
由于远程库是空的,我们第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送到远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取可以简化命令。
$ git push -u origin master
$ git push origin master
$ git pull origin <分支名>:<分支名> //拉取远程仓库分支到本地分支