简介
什么是Git
Git是一款先进的分布式版本控制系统。
什么是版本控制?
版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。如果你需要对一个文件做长时间的修改,版本控制系统十分适合你,有了它就可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。 使用版本控制系统通常还意味着,就算你乱来一气把整个项目中的文件改的改,删的删了,这也没有关系,你也照样可以很容易地就恢复到原先的样子。但额外增加的工作量却微乎其微。
分布式和集中式
集中式的版本控制放在了中央处理器,这就造成了每次想要修改文件都需要向中央处理器把文件拿过来,然后再提交过去,中央处理器保存修改的记录,这就需要联网,而分布式的没有中央处理器,每个人的电脑都有版本控制,这使得一次下载,可以重复修改,并且在本地记录着修改,不需要联网,另外因为版本控制在个人电脑的缘故,也更分布式版本管理安全。
本地项目上传至github
1、创建本地版本库 Bash
<1>创建一个文件夹$ mkdir test
, 并进入文件夹cd test
<2>使文件夹编程可管理的仓库$ git init
,这时当前文件夹test下会生成一个,git文件用于管理和跟踪版本库
<3>将需要上传的文件拷贝到test文件夹下,并建立上传到本地仓库
$ git add .
将文件上传到暂存区$ git commit -m 'first commit'
将暂存区文件上传到本地仓库
另外可以随之使用$ git status
查看当前状态
2、github上创建远程仓库
<1> 创建ssh key 密钥,为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。如果本地没有.ssh
文件夹的话,需要在bash中创建ssh密钥$ ssh-keygen -t rsa -C "youremail@example.com"
<2> 添加ssh key 密钥 在github中的个人主页setting,再选中里面的SSH and GPG KEYS,点击右上角的New SSH key,然后Title里面随便填,再把刚才.ss文件夹下的id_rsa.pub里面的内容复制到Title下面的Key内容框里面,最后点击Add SSH key,这样就完成了SSH Key的加密。
<3> 创建一个名为test的仓库
关联仓库
1 内容关联
在Github上创建好Git仓库之后我们就可以和本地仓库进行关联了,根据创建好的Git仓库页面的提示,可以在本地TEST仓库的命令行输入:$ git remote add origin https://github.com/xxx/xxx.git
2 内容推送
$ git push -u origin master
由于新建的远程仓库是空的,所以要加上-u这个参数,等远程仓库里面有了内容之后,下次再从本地库上传内容的时候只需下面这样就可以了:$ git push origin master
3 内容合并
如果在github创建的仓库中存在其他文件,那么如果直接关联仓库就会报错,failed to push some refs to https://github.com/xxx/xxx.git
,那是由于你新创建的那个仓库里面的README文件不在本地仓库目录中,
这时我们可以通过以下命令先将内容合并以下$ git pull --rebase origin master
在合并的时候由于两个仓库不相关联,可能会出错fatal: refusing to merge unrelated histories
,我们强制从远程仓库拉下来合并$ git --allow-unrelated-histories
,合并之后在提交
常用命令
生成git管理的仓库
$ mkdir 文件夹
创建文件夹$ cd 文件夹
进入目录$ ls
查看当前工作目录下的文件$ pwd
查看当前文件路径$ git init
将文件变成可管理的仓库$ git status
查看git当前状态$ touch 文件名
创建文件git remote add origin url
关联远程仓库 url为远程仓库的链接
日志以及分支:
git push origin test
推送本地分支到远程仓库git rm -r --cached
文件/文件夹名字 取消文件被版本控制git reflog
获取执行过的命令git log --graph
查看分支合并图git merge --no-ff -m
'合并描述' 分支名 不使用Fast forward方式合并,采用这种方式合并可以看到合并记录git check-ignore -v
文件名 查看忽略规则git add -f
文件名 强制将文件提交
删除
- 删除暂存区
$ git rm --cach 文件名
- 删除工作区
$ rm 文件名
- 如果删除文件夹 需要加一个
-r
表示递归删除文件
提交到远程仓库
$git push origin master
上传信息到远程仓库
回退操作
git reset --hard HEAD^
回退到上一个版本git reset --hard ahdhs1(commit_id)
回退到某个版本git checkout -- file
撤销修改的文件(如果文件加入到了暂存区,则回退到暂存区的,如果文件加入到了版本库,则还原至加入版本库之后的状态)- git reset HEAD file 撤回暂存区的文件修改到工作区
编辑文件
$ vi 文件名
进入VIM编辑器,分为三种模式
命令模式
- i 切换到输入模式,以输入字符。
- x 删除当前光标所在处的字符。
- : 切换到底线命令模式,以在最底一行输入命令。
若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。
输入模式
- 字符按键以及Shift组合,输入字符
- ENTER,回车键,换行
- BACK SPACE,退格键,删除光标前一个字符
- DEL,删除键,删除光标后一个字符
- 方向键,在文本中移动光标
- HOME/END,移动光标到行首/行尾
- Page Up/Page Down,上/下翻页
- Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
- ESC,退出输入模式,切换到命令模式
底线命令模式
- :w 保存文件但不退出vi
- :w file 将修改另外保存到file中,不退出vi
- :w! 强制保存,不推出vi
- :wq 保存文件并退出vi
- :wq! 强制保存文件,并退出vi
- q: 不保存文件,退出vi
- :q! 不保存文件,强制退出vi
- :e! 放弃所有修改,从上次保存文件开始再编辑
常见问题
如何修改github上仓库的项目的语言类型
- 问题:在把项目上传到github仓库上时语言会显示错误语言
- 原理:github 是采用 Linguist来自动识别你的代码判断归为哪一类
- 方案:在仓库的根目录下添加.gitattributes文件:并写入
*.js linguist-language=python
*.css linguist-language=python
*.html linguist-language=python
意思是将.js、css、html当作python来统计