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
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就出现下面的

Paste_Image.png

安装完成后,还需要最后一步设置,在命令行输入:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
这里的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 "your_email@example.com"

2.在本地创建ssh key,

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

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

$ ssh-keygen -t rsa -C "youremail@example.com"

按3个回车,密码为空。

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

Paste_Image.png

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


Paste_Image.png
Paste_Image.png
Paste_Image.png
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 your_email@example.com

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

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

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


测试
可以输入下面的命令,看看设置是否成功,git@github.com的部分不要修改:
$ ssh -T git@github.com

如果是下面的反馈:

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 "cnfeat@gmail.com"//填写自己的邮箱

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

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到一个临时的地方叫做缓存区,然后等你全都确定无误,就可以提交了。

Paste_Image.png

一些git 命令行

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

git log实例截图


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原理图

移除远程库

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

git remote rm origin
git remote add origin git@github.com: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
Paste_Image.png

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

删除分支

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

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

$ git checkout -- readme.txt

在github上创建Create a new repo

Paste_Image.png

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

Paste_Image.png

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

添加远程库

$ git remote add origin git@github.com: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 git@github.com:yourgithub/gitskills.git

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

github图形化操作(我随便找的一个项目)

分支管理

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

创建分支(命名为dev)

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

Fast-forward快速合并分支

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

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

分支冲突--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 stash

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

.gitignore

远程协助

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

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

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

远程协作小结

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

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

谢谢廖雪峰大神

虽然他看不到

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

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"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容