git

教程网站

廖雪峰的官方网站
阮一峰的官方博客--git远程操作详解
git教程
trygit.io

Git是什么?

Git是目前世界上最先进的分布式版本控制系统(没有之一)

为什么学习git

1.装蛋(牛逼的大神们都在用),github全是绿色人真的让我羡慕
2.解决多人协作
3.提高开发效率,避免代码重复
4.有人推荐大学期间一定要了解markdown vim python git这几个工具,那个作者的理由是 学生时期时间多 可以随便折腾。。。。

git的身世

(其实我一直抵触写这种虚的玩意觉得没有什么用,现在明白这更多是对创作者的一种尊敬,和精神的传播。)

Linus在1991年创建了开源的Linux。

Linus在2005年,花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?

Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。

现在的github已经成为一个社区,不光局限在软硬件还有人使用github出书,做blog,更多移步知乎问答git有什么奇技淫巧。

git与svn cvn的区别

CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统
svn cvn需要联网
git随时随地,离线开发,然后上传就ok
而且git的分支管理巨强大

远程仓库(github)

Paste_Image.png
git_第1张图片
Paste_Image.png

github由Tom Preston-Werner、Chris Wanstrath和PJ Hyett三人在2008年联合创立。从一个开发者社区变成了一个免费开源代码托管平台,在2011年的9月份,GitHub的用户数就已经突破了100万的关卡;到了今年1月,其又迎来了第300万的用户。也就是说,在短短的几个月内,该网站就迎来了50万的新用户。当前,GitHub雇用了超过150位员工。GitHub不仅是一个分享开源创作并与其它程序员合作的好地方,你也可以从GitHub上收到自己作品的反馈。用户可以提出复核、评论每一行的代码、报告问题、甚至询问其它用户的想法,并尝试将它们变成现实。
我个人特别敬佩github的公司,据说全公司从ceo到普通员工,不管是从事开发的工程师还是行政管理人员都特爱写代码,公司文化就是这样。

我们让协作和分享更轻松

这是github创立的目标,性感的目标,伟大的产品,相比当下的哪些互联网创业公司,得了。。。我还没有资格说他们。

扯多了,,,,,这就是情怀

git安装

linux自带git
window直接去git官网下载git的.exe软件,一直下一步/next就行
安装完linux直接在命令行里运行就行
window下鼠标右键Git Bash就出现下面的

git_第2张图片
Paste_Image.png

安装完成后,还需要最后一步设置,在命令行输入:
$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"
这里的your name 和email地址换成自己的

创建远程仓库

1.注册github

git创建

先创建文件夹


Paste_Image.png

然后输入$ git init 完成

Paste_Image.png

这时可以发现当前目录下多了一个.git
的目录(有时候时不可见的 需要运行 ls -ah),不懂不要去修改里面的内容。。修改的后果我也不知道。。大不了一死

1、创建一个 SSH key

$ ssh-keygen -t rsa -C "[email protected]"

2.在本地创建ssh key,

ls ~/.ssh / 打开.ssh 文件

在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

$ ssh-keygen -t rsa -C "[email protected]"

按3个回车,密码为空。

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rs和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

git_第3张图片
Paste_Image.png

3.登陆GitHub,打开“Account settings”,“SSH Keys”页面:然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容


Paste_Image.png
git_第4张图片
Paste_Image.png
git_第5张图片
Paste_Image.png
git_第6张图片
Paste_Image.png

代码参数含义:
-t 指定密钥类型,默认是 rsa ,可以省略。-C 设置注释文字,比如邮箱。-f 指定密钥文件存储文件名。
以上代码省略了 -f 参数,因此,运行上面那条命令后会让你输入一个文件名,用于保存刚才生成的 SSH key 代码,如:

Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/you/.ssh/id_rsa): [Press enter]

当然,你也可以不输入文件名,使用默认文件名(推荐),那么就会生成 id_rsa 和 id_rsa.pub 两个秘钥文件。

接着又会提示你输入两次密码(该密码是你push文件的时候要输入的密码,而不是github管理者的密码)

当然,你也可以不输入密码,直接按回车。那么push的时候就不需要输入密码,直接提交到github上了,如:

Enter passphrase (empty for no passphrase): # Enter same passphrase again:

接下来,就会显示如下代码提示,如:

Your identification has been saved in /c/Users/you/.ssh/id_rsa.
Your public key has been saved in /c/Users/you/.ssh/id_rsa.pub.
The key fingerprint is:
01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db [email protected]

当你看到上面这段代码的收,那就说明,你的 SSH key 已经创建成功,你只需要添加到github的SSH key上就可以了。

2、登陆github系统。点击右上角的 Account Settings—->SSH Public keys —-> add another public keys

3、把你本地生成的密钥复制到里面(key文本框中), 点击 add key 就ok了

git_第7张图片

测试
可以输入下面的命令,看看设置是否成功, [email protected]的部分不要修改:
$ ssh -T [email protected]

如果是下面的反馈:

The authenticity of host 'github.com (207.97.227.239)' can't be established.RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.Are you sure you want to continue connecting (yes/no)?

不要紧张,输入yes就好,然后会看到:

Hi cnfeat! You've successfully authenticated, but GitHub does not provide shell access.

设置用户信息
现在你已经可以通过SSH链接到GitHub了,还有一些个人信息需要完善的。
Git会根据用户的名字和邮箱来记录提交。GitHub也是用这些信息来做权限的处理,输入下面的代码进行个人信息的设置,把名称和邮箱替换成你自己的,名字必须是你的真名,而不是GitHub的昵称。

$ git config --global user.name "cnfeat"//用户名
$ git config --global user.email "[email protected]"//填写自己的邮箱

SSH Key配置成功
本机已成功连接到github。
若有问题,请重新设置。常见错误请参考:
GitHub Help - Generating SSH Keys
GitHub Help - Error Permission denied (publickey)
填好就行了。
ssh -Tv [email protected] 测试是否完成

git_第8张图片

github上建立仓库
登录后系统,在github首页,点击页面右下角「New Repository」

Paste_Image.png

当前创建git的文件夹里新建文件

(这里用readme.txt为例)
首先在文件夹先新建一个readme.txt的文件
(千万不要使用Windows自带的记事本编辑任何文本文件)

Paste_Image.png

把readme.txt添加到git仓库

成功的话,没有任何提示,git就是这样不废话,

git commit -m '提交第一个文件到git仓库'

-m 后面是你添加的注释,写代码不写注释,那你等着被打死吧。
上面的add是添加 commit是提交。。。。其实就是add到一个临时的地方叫做缓存区,然后等你全都确定无误,就可以提交了。

git_第9张图片
Paste_Image.png

一些git 命令行

$ git status ---查看git状态
$ git diff ---查看有哪些修改
$ git log ---查看日志
$ git log --pretty=oneline ---在一行显示log
$ git log --graph 查看分支合并图

git log实例截图


git_第10张图片
Paste_Image.png

这里需要了解的就是commit 就版本号,唯一确定,以后想会退到那个状态,只要知道commit的前几位就可以(基本7,8位就行 别1,2位就行)就可以

git常用功能

  1. git clone
  2. git remote
$ git remote -v
  1. git fetch
  2. git pull
  3. git push
git_第11张图片
git原理图

移除远程库

有时候打错了,,想要换一个

git remote rm origin
git remote add origin [email protected]:Liutos/foobar.git

版本回退

$git reset --hard +版本号就可以
Paste_Image.png

Git中,总是有后悔药可以吃
如果你git reset 后悔了

$ git reset --hard HEAD^
回退到上个版本
$ git reset --hard HEAD^^
回退到上上个版本
$ git reflog
查询版本号

这种“回退”就是在否认历史,如果有其他人也在用你的remote,你push以后将他置于何地呢?
所以,如果仅仅你自己在使用,那么强制push,命令是 git push -f 如果是与人合作,更漂亮的做法是revert,给个例子供参考

$ git checkout -- readme.txt
git_第12张图片
Paste_Image.png

这些版本回退都是在你本地实现的

删除分支

$rm readme.txt
$git rm readme.txt
$git commit -m "你爱说什么说什么 例如删除分支"

另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:

$ git checkout -- readme.txt

在github上创建Create a new repo

git_第13张图片
Paste_Image.png

在Repository name填入learngit
,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库:

git_第14张图片
Paste_Image.png

这里我就直接用廖雪峰大神的原图了

添加远程库

$ git remote add origin [email protected]:yourgithubname/learngit.git

origin是远程库的意思,对应github的repository

$ git push -u origin master

把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样.
从现在起,只要本地作了提交,就可以通过命令:

$ git push origin master

把本地master分支的最新修改推送至GitHub,现在,你就拥有了真正的分布式版本库!

从github上克隆代码

git clone [email protected]:yourgithub/gitskills.git

所以我们只要知道对方或者自己的github账号以及项目名称就可以在github上获得源码(我们也可以直接在github网站上用网页直接图形化操作)

git_第15张图片
github图形化操作(我随便找的一个项目)

分支管理

谈谈我对分支管理的认识
首先一个项目是要多人协作,就会出现不同组件合并,相互研究对方代码,相同组件不同版本合并升级删除,这些操作,就算小项目都会折磨死你。

创建分支(命名为dev)

$ git branch dev
  #创建分支
$ git checkout dev
  #切换到dev分支
#简写如下
$ git checkout -b dev

Fast-forward快速合并分支

$ git merge dev
  #把dev分支合并到当前分支
  #so 你需要在合并前切换到master

这样是最基本的合并分支,只有在dev与master在相同的部分是没有改变得,dev只是增加了一个文件这样不产生冲突的情况下才成功合并
如果存在冲突就需要解决冲突才能合并

git_第16张图片
分支冲突--by廖雪峰

通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
下面我们实战一下--no-ff方式的git merge:

$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy. 
readme.txt | 1 + 1 file changed, 1 insertion(+)

删除分支

$ git branch -d dev
$ git branch -D dev
#强行删除,还没有合并的时候想要删除是会报错的 需要强制删除
git_第17张图片
分支小结

git stash

关于git stash ,。。。。廖神叼

.gitignore

远程协助

看大神怎么说吧,我也说不清还是学学人家吧

远程协作,以及冲突处理,协作流程

小结贴上 留给自己复习 哈哈哈哈哈

git_第18张图片
远程协作小结

到这里git的基本操作就学习完了

还有的例如搭建私有git服务器
自己研究吧

谢谢廖雪峰大神

虽然他看不到

代表所有想了解git的孩子们对大叔表示诚挚的问候

git_第19张图片

gitignore 后期修改无效的解决办法
Even if you haven't tracked the files so far, git seems to be able to "know" about them even after you add them to .gitignore.

NOTE : First commit your current changes, or you will lose them.

Then run the following commands from the top folder of your git repo:

git rm -r --cached .
git add .
git commit -m "fixed untracked files"

你可能感兴趣的:(git)