Git的简单教程

Git简单教程

小白最近想做个自己的网站,于是先来研究一波Git,放一个比较详细的教程参看https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
以下是自己总结的

一、git安装配置

先从官网下载windows版的然后默认配置安装,这里就略过了

配置用户信息

点击git-bash,会弹出命令行,输入

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

–global:添加了此命令,那么更改的配置文件就是位于用户主目录下的,以后的项目都将默认使用此用户信息。若需要为某个项目使用其他用户信息,只需要去掉–global重新配置即可,新的配置保存在当前项目的.git/config中。

查看配置信息

$ git config --list   //也可以将--list换为具体的某个环境变量如:user.name

创建repo

选择一个目录,可以用已有的或者mkdir新建,cd进去以后使用git init把当前目录作为仓库并初始化
切换到目录

二、基本使用

上传

初始化后,目录下会生成一个名为.git的目录,我们要将当前目录下的几个文件纳入git版本控制下,需要先用git add让git对文件开始跟踪,之后提交。(注意要放在你建立的仓库文件夹下才能跟踪)
把一个文件放到Git仓库只需要两步
使用 git add 命令将想要快照的内容写入缓存区, 而执行 git commit 将缓存区内容添加到仓库中。

$ git add readme.txt	//把readme添加到仓库,一次commit可以多次add
$ git commit -m '此版本项目说明'	//-m后面输入的是本次提交的说明,这样你就能从历史记录里方便地找到改动记录。

查看项目当前状态

$ git status -s                  //-s:简短输出

查看版本改动

$ git diff            //尚未缓存的改动
$ git diff --cached   //已缓存的改动
$ git diff HEAD       //已缓存和未缓存的所有改动
$ git diff --stat     //显示摘要

查看提交历史

$ git log

–oneline 查看历史记录简介版本
–graph 查看什么时候出现了分支、合并(后面写)
–reverse 逆向显示日志
–author 指定具体某一个作者
–since 和 --before 指定日期
–decorate 查看标签
其他log命令:https://git-scm.com/docs/git-log

克隆仓库

$ git clone <repo> <directory>    //directory:本地目录

撤销修改

$ git checkout -- readme.txt

命令git checkout – readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。

git reset HEAD <file>	//命令用于取消已缓存的内容,HEAD表示最新版本

删除

$ rm test.txt

一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了。在add以后,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了。现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit。文件就从版本库中被删除了。

另一种情况是删错了

$ git checkout -- test.txt

回退到上一个状态

三、远程仓库

终于到了使用github这一步了,写博不易
首先,注册一个github账户,本地Git仓库和GitHub仓库之间的传输是通过SSH加密,所以我们需要配置验证信息:

1. 创建ssh

检查ssh
打开终端,运行 cd ~/.ssh
如果路径下无文件跳过下一步操作,如果有文件代表已有ssh key,需要进行备份
备份已有ssh

mkdir key_backup
mv id_rsa* key_backup

生成ssh key

ssh-****** -t rsa -C "[email protected]"  //注册的邮箱

之后回车,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对。

2. 将ssh key添加到github上

在setting里面找到ssh and GPG keys,输入id_rsa.pub里的内容,title随意命名
在这里插入图片描述

3. 测试链接是否成功

在终端输入

ssh -T [email protected]

这里会要求你输入SSH key密码,如果刚才生成SSH key时未输入密码,密码就为空。
我这里报了一个错

The authenticity of host ‘github.com (13.250.177.223)’ can’t be established.

搜索以后发现是缺少文件,输yes即可

4. New repository(新建仓库)

在github右上角找到你的仓库,创建一个新的仓库
创建好以后,根据提示,关联本地和GitHub仓库

$ git remote add origin https://github.com/yuanfeisiyuetian/blogrepo.git	//找自己的复制,这个是我的仓库
$ git push -u origin master

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

从远程仓库下载新分支与数据

git fetch

从远程仓库提取数据并尝试合并到当前分支

git pull

四、分支管理

几乎每种版本控制系统都支持类似的分支,使用分支从开发主线中分离,在不影响主线的同时继续工作
创建分支命令:git branch (branchname)

切换分支命令:git checkout (branchname)

git checkout命令加上-b参数表示创建并切换,相当于以上两条命令

列出分支命令:

git branch	#当前分支前面会标一个*号

合并分支命令:git merge

–no-ff参数,表示禁用Fast forward,可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

删除分支命令:git branch -d (branchname)

合并冲突

就是些时间问题,我个人开发应该不太会遇到叭大概
emmmm原理请参考最上面的链接

git status可以查看冲突文件,手动修改以后重新add,commit
git log 可以查看分支合并情况

其他

bug分支

详细说明
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

Feature分支

详细说明
开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。

多人协作

详细说明
查看远程库信息,使用git remote -v;
本地新建的分支如果不推送到远程,对其他人就是不可见的;
从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

rebase

详细说明
rebase操作可以把本地未push的分叉提交历史整理成直线;
rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

重要的一点!

把要忽略的文件名填进.gitignore,Git就会自动忽略这些文件 .gitignore文件的编写,emmmm以后更新