写在前面
Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。
在往后工作、生活、学习和交流中都会经常用到,功能强大,在这里稍微做个总结。
从零开始学git
git安装
从官网下载安装包(官网地址:https://git-scm.com/downloads),下载后安装即可。
安装过程中,可以设置默认编辑器,默认使用vim,也可以自定义,点击Browse,添加第三方编辑器.exe即可。
安装成功后,在开始菜单中找到Git文件夹,其中Git GUI为用户界面模式,Git Bash为命令行模式。
由于git是分布式管理工具,使用前还需要最后一步设置,安装命令如下:
1
2
3
4
5
6
7
8
9git config --global user.name "Your Name" //设置用户名
git config --global user.email "you@example.com" //设置用户邮箱
git config --list //查看设置
//git config --global 参数,有了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然你也可以对某个仓库指定的不同的用户名和邮箱。
//配置git的当前仓库邮箱和用户名配置有2种方式: a.直接不使用--global;b.使用--local。
git config user.name "Your Name"
git config user.email "you@example.com"
git config --local user.name "Your Name"
git config --local user.email "you@example.com"
如果使用github,还需要进行下面的配置:
- 生成公钥:使用命令ssh-keygen -t rsa -C “you@example.com“,将前面邮箱换成你注册的github邮箱,一路回车就行了。
- 可以在用户主目录里找到.ssh目录(/c/Users/DELL/.ssh/),里面有id_rsa 和 id_rsa.pub两个文件,找到公钥id_rsa.pub,打开文件复制公钥。
- 登陆GitHub,打开“Settings”-> “Account”,“SSH Keys”页面,然后,点击“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。
git的四个工作区
- Workspace:工作区,就是你平时存放项目代码的地方。
- Index / Stage:暂存区,用于临时存放你的改动,一般存放在 “.git目录下” 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index),保存即将提交到文件列表信息;
- Repository:本地仓库,就是存放项目代码的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本;工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
- Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换。
git基本命令、用法
创建版本库
- 创建git目录相关命令
cd(进入某个目录)
mkdir(创建文件夹)
pwd(查看当前所在目录)
ls(显示指定工作目录下的文件列表) - 初始化,用git init来初始化git版本库并在当前文件夹创建一个.git文化夹。
1
$ git init
命令说明
当我要新增一个叫test.txt的测试文件到远程仓库中时,我需要用到的命令有
1
2
3
4$ git status
$ git add test.txt
$ git commit
$ git push
其中
- git status :检查提交代码前修改了什么内容,查看当前Git目录下各文件的状态。
- git add:将修改的文件添加到暂存区。可以添加文件或者目录,也可以使用通配符。修改了代码,不管是增加、删除、修改文件这些操作,都是使用git add将修改的文件添加到暂存区。
- git commit:将暂存区文件提交到仓库,直接调用git commit会弹出编辑器,输入提交日志(如果是多行日志,建议使用);针对单行日志提交的情况,可以使用命令:git commit -m “日志信息” 。如果已经执行了git commit命令,还有需要修改commit日志或者需要修改提交的文件,可以使用git commit –amend修改上一次commit。
- git push -u origin master:将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。
- git remote add
,添加远程仓库。以github为例:git remote add origin git@github.com:<username>/<reponame>.git。
修改文件
修改文件后,通过git status查看修改了哪些文件。如果想知道详细的修改,使用git diff。
使用git add命令将修改文件添加到暂存区,再执行git commit和git push命令提交代码。如果git push出现冲突,先执行git pull命令,解决冲突后再提交代码。
命令说明:
- git diff [<path>…]:查看当前工作区的区别,diff对比的是当前工作区与最后一次commit提交 的代码的修改。命令参数可以指定文件目录或文件。
- git diff –cached或 git diff –staged:显示暂存区(已add但未commit文件)和最后一次commit(HEAD)之间的所有文件的修改,git diff –cached和git diff –staged的作用相同。
- git diff [<options>] <commit> <commit> [–] [<path>…]:对比两次提交的不同,commit是两次提交的版本号。
- git log:获得历史修改记录,常用的还可以增加–stat参数,参考具体修改了哪些文件。
- git pull:取回远程仓库某个分支的更新,再与本地的指定分支合并。
回滚版本
git reset
修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本。如果想回滚到之前的某个版本,可以使用这个命令。
如果需要撤销的代码已经push到远程仓库,执行git reset回滚代码后,需要执行git push -f强制提交到远程库,执行git push会报错。
注意:在Git中,用HEAD表示当前版本,也就是最新的提交,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写HEAD~100。
我的理解是可以当做直接回退到多少某一个版本,而那个版本之后的信息将会丢失。1
2
3
4
5
6$ git reset HEAD 文件名 //移除不必要的添加到暂存区的文件
$ git reset HEAD^ 或者 commitid //回滚到上一次的提交
$ git reset --soft HEAD^ //修改上次提交的信息,即commit -m "修改这里的内容"
$ git reset --soft //只是将HEAD引用指向指定的提交,撤销已提交的版本库,工作区跟暂存区的内容不会改变
$ git reset --mixed //(默认选项)将HEAD指向指定的提交,暂存区的内容随之改变,工作区内容不变
$ git reset --hard //将HEAD指向指定的提交,暂存区跟工作区都会改变git revert
撤销某次提交,这次提交的commit和history都会保留,并且把这次撤销作为一次新的提交。如果只是想撤销某一次提交,又想保留这次提交后面的版本,可以使用使用“git revert -n 版本号”命令来执行revert。
在执行完git revert之后,需要执行commit和push命令来提交修改。
revert通过反向对比来得到某个版本改动之前的代码,然后再将得到的代码进行一次新的提交。即之前的代码能够找到,但又回溯到了目标版本号。下面举例说明一下reset和revert的区别。首先假设我们提交了三次版本:版本1、版本2、版本3。如下图所示: