Git总结(一)

摘要

Git是一个免费的开源分布式版本控制系统,旨在快速高效的处理从小到大的所有项目。本篇文章介绍一些Git中的基本概念,顺带罗列一些基本的操作。

Git安装

apt-get install git : linux环境下用apt或yum工具进行安装(windows环境可以去官网下载安装包)

Git信息配置

Git提供了git config工具用于配置或读取相应的工作环境变量(存在相应的config文件中)

git config --global user.name "fxd":配置用户名
git config --global user.email fxd@xxx.com:配置用户邮件地址
git config --list:查看已有的配置信息。

工作区、暂存区和版本库概念

工作区(Working Directory):电脑中能看到的目录,也就是被管理的文件夹。
版本库(Repository):或者叫仓库,工作区中有个隐藏目录.git,这个不属于工作区,是Git的版本库。
暂存区(stage/index):版本库分为暂存区和本地仓库,暂存区相当于提交至本地仓库前的一个过渡区域。在这里提交文件不会产生版本号。
远程仓库(Remote):存放在Git服务器上的仓库,便于多个不同工作节点进行并行工作及合并。

以下命令用于产生版本库:
git init:在一个目录下初始化仓库。
git clone:拷贝一份远程仓库,即下载项目。

alt 版本库
将文件添加到版本库中时分两步执行:
git add:将文件从工作区添加到暂存区。
git commit:提交更改,将暂存区的所有内容提交到当前分支。(创建Git版本库时默认处于master分支,所以该命令往master分支上提交更改)。

使用以下命令查看版本库状态以及提交记录:
git status:查看版本库状态,哪些文件是没有add至暂存区的,哪些文件是没有commit至版本库的。
git log:查看提交日志(不包括已经删除的commit记录和reset记录),可以使用git log --pretty=oneline简化输出信息。(这个命令可以查看每次提交后的版本号commit id,便于版本回退)。 可以使用--graph参数查看分支、合并等信息。
git reflog:查看所有操作记录,包括提交和回退的操作,可以找到被回退掉的版本号。

提交撤回和版本回退

Git一类的版本控制工具最重要的功能之一就是版本回退。以下命令是常用的回滚命令。
撤销工作区的修改(用暂存区版本替换掉工作区版本)
git checkout .:用暂存区所有文件替换工作区文件,这个命令用于清除工作区中未添加至暂存区的改动。
git checkout --<file>:将某一指定的file文件用暂存区版本替换工作区版本。
git restore <file>:同git checkout --<file>,新版命令。避免和checkout命令混淆,推荐使用。

撤销暂存区的修改(用master分支版本替换掉暂存区版本)
git reset HEAD:撤销暂存区所有文件的修改(用master分支所有文件替换暂存区所有文件,工作区不受影响)。
git reset HEAD <file>:撤销暂存区file文件的修改(用master分支所有文件替换暂存区所有文件,工作区不受影响)。
git restore --staged <file>:同git reset HEAD <file>,新版命令,避免和reset命令混淆,推荐使用。

master分支版本同时替换暂存区版本和工作区版本
git checkout HEAD .git checkout HEAD <file>:用master分支版本同时替换暂存区版本和工作区版本,不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

版本回退:
git reset --hard <commit id>:将版本库回退到某一特定版本(commit id那版)。顺便工作区的文件也都更新到该版本。
此外使用git reset --hard HEAD^回退到上一版本,HEAD^^则是上上版本。

远程仓库

ssh-keygen -t rsa -C "youremail@example.com":创建SSH Key,执行之后在用户主目录下会有.ssh文件夹,里面有id_rsa和id_rsa.pub两个文件,后者为公钥。
git remote add origin ...:将本地仓库和远程仓库进行关联,…为远程仓库地址。
git remote -v:查看远程主机信息。

将本地仓库中的内容推送到远程仓库命令如下(实际上是将本地分支合并到远程分支上)
git push <远程主机名> <本地分支名>:<远程分支名>:将本地分支上传到远程并合并。
git push <远程主机名> <本地分支名>:上述命令中本地分支名和远程分支名相同的时候,可以省略远程分支名。例如将本地master分支推送到origin主机的master分支上:
git push origin master
git push -u origin master:使用-u参数之后,会将本地的master分支和远程的master分支关联起来,之后在推送或拉取的时候可以直接git push或者git pull

从远程仓库获取代码并合并到本地
git pull <远程主机名> <远程分支名>:<本地分支名>:从远程分支拉取代码并合并到本地分支上。同样,当远程分支与当前分支合并时,可以省略冒号后面的部分:git pull origin master。且该命令相当于git fetch紧接着一个git merge
git clone:直接克隆远程仓库。

总结

本篇文章介绍了Git的基本概念和基本操作,关于远程仓库的进一步操作将在下篇进行分析,在下篇文章中着重介绍Git分支功能,分支是Git最重要的能力之一,但理解起来稍微有点困难,但理解后会发现其实很简单。

参考链接

  1. 廖雪峰Git教程
  2. 菜鸟教程Git教程