最近有朋友常常问git的一些操做,写在这里与你们分享,之后也不用一一解释了。惯例,这是基础分享,从安装开始提及:git
安装:github
若是搞定,那么恭喜,不然请继续重复。ssh
由于Git是分布式版本控制系统,因此须要填写用户名和邮箱做为一个标识。分布式
注意:git config –global 参数,表示你这台机器上全部的仓库都会使用这个配置,固然也能够对某个仓库指定的不一样的uname和email。加密
建立版本库spa
以e盘下www为例版本控制
$ cd e: 进入 e盘 、指针
$ cd www 进www 日志
$ pwd /e/www 回车看你的目录是否正确打印 code
$ mkdir test 建立版本库 (新建名为test的文件夹)
$ cd test
$ git init 这样test目录下就多了一个.git 文件 不要动他!!! 用来控制版本等一些操做的
没问题的话,我们继续走着~
添加文件到版本库
若是你以为内容太多,能够清理一下,
$ clear 清理当前命令台
如今,咱们在版本库test目录下,新建个文件 README.md 并在在里面写点内容 # 要饭的好帅 (固然你也能够建立其余类型的文件写你想写的内容,好比,新建一个txt文件,写上楼主好帅)
回来继续~
$ git add README.md 把刚才新建的README.md文件添加到暂存区里面
$ git commit -m"第一次提交" 把文件提交到仓库 -m"用来备注的"
注意:add是入暂存 commit才是入库
$ rm README.md 试一下。。。。。卧槽,原来这是删除文件,肿么破
$ git checkout --README.md 不要紧,又回来了,仔细看一眼,仍是不是当年的夏雨荷嘛。
注意:命令git checkout --readme.txt 中的 -- 很重要,若是没有的话,那么命令变成建立分支了。
我想完全干掉他肿么办?在 rm后,再commit提交,这不是我告诉你的,误删不是俺的过错 0.0
说说目录中那个隐藏目录.git,这是版本库。其中最重要的就是stage(暂存区),还有Git为咱们自动建立了第一个分支master,以及指向master的一个指针HEAD。
我们刚才不是提交须要add 与 commit么
log
改一下文件的内容,
$ git add README.md
$ git commit -m"第二次修改"
$ cat README.md 显示当前版本的文本内容
在改一次(最好内容有所区别),在 add commit
好,别玩了....
$ git log 看看你的捣蛋了么,证据确凿。铁证如山。
$ git log --pretty=oneline 单行显示。以为log日志太乱的话,能够用,若是信息太多,可能会显示END 无视它,按q键退出来就好
$ git reset --hard HEAD^ 回到你上次的版本
$ git reset --hard HEAD^^ 上上次 修改那么屡次,要^^^^^^^^^^,卧槽。。。别着急,先
$ git reflog 看到前面是什么,我才应该是版本号,最后一行显示的是第一次提交的版本,看到了版本号,我以为你应该想到了什么,没错,咱们根据版本号回到以前的版本,版本号就写前面几位就能够,别那么实在,把一大串都写上去
$ git reset --hard 6459c17 回去看看,你的文件内容发生了什么变化
多玩几回,试试看。。。
累了么? 在休息以前先mark,帅气的要饭的继续接着聊远程仓库,回来的时候记得带着你的github帐号
远程仓库
到这里,我假设你已经有了github帐号,若是没有,快去注册。
因为你的本地仓库和线上仓库之间的传输是经过加密的,因此须要你设置:
ssh-keygen -t rsa –C “你的邮箱” 在刚才test目录下,是否是已经多了两个文件 xxx 与 xxx.pub
打开” settings”(右上角头像右侧的向下小三角)中的SSH Keys(左侧列表)页面,而后点击“New SSH Key”,
在title里,你能够写一个有意义的titie(好比:这是一个有意义的titie),在Key文本框里粘贴xxxx.pub文件的内容。 而后Add SSH key
是的,没错,你如今已经看到你的key了
接下来你又该想了,我本地有个仓库,还想在线上建立个仓库,而且但愿两个仓库同步,这样线上既能够备份,别人也能够经过该仓库来作一些事情,要怎么作?
那么我们登陆github,而后在右上角找到“new repository”(在头像左侧 +下三角)建立一个新的仓库。而后写上你的项目名字test,点击建立。
这个仓库克隆新仓库,也能够把本地仓库与之关联,而后,把本地仓库的内容推送到线上仓库。
如今有空仓了,而后呢?
回到命令台,继续...
$ git remote add origin https://github.com/xxx/TEST.git
$ git push -u origin master 把当前分支master推送到远程
因为远程库是空的,第一次推送master分支时,加 –u参数,Git会把本地的master分支内容推送的远程新的master分支,还会把他们关联起来,
这样之后的推送或者拉取时就能够简化命令。推送成功后,能够马上在github页面中看到远程库的内容已经和本地如出一辙了。
注意:这里须要输入你的github帐号密码
提交一下试试看?
$ git push origin master 如今你就有了真正的分布式版本库咯。
克隆仓库
如今,若是远程库有新的内容了,我们搞到本地来?这部简单么,下载嘛。。。好吧,您赢了。
咱们须要克隆,那么如何克隆呢?
登陆github,我们建立一个新的仓库,名字叫test2
$ git clone https://github.com/xxx/text2.git 克隆
Cloning into 'text2'...
$ ls 查看仓库目录
ds.txt luqin luqin.pub README.md text2/
建立与合并分支
我们刚才提到,版本回退时候,每次提交,git都会把它们根据时间串成大串儿,这就是一个分支。如今只有一串儿(只有一条事件线),咱们把这个分支称之为主分支。
就是master分支。HEAD严格来讲不是指向提交,而是指向master,master才是指向提交的,因此,HEAD指向的就是当前分支。
$ git checkout -b dev
Switched to a new branch 'dev' git checkout 命令加上 –b参数表示建立并切换,至关于以下2条命令
$ git branch dev
$ git checkout dev
$ git branch 查看分支,会列出全部的分支,当前分支前面会添加一个星号。
* dev
master
而后咱们在dev分支上继续,还记得我们以前的那个文本文件么。在加点内容:
$ cat README.md 查看文件
是否是发现了什么
继续查看README.md内容以下:
$ git checkout master 我们切换到主分支master上
M README.md
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
$ git merge dev 把dev分支上的内容合并到当前分支(master)
Already up-to-date.
在看一眼,发生了什么。。 是否是在此分支看到刚才增长的东东。
git merge是合并指定分支到当前分支上,合并后,再查看README.md内容,这时候咱们能够看到,和dev分支最新提交的是彻底同样的。
$ git branch -d dev 在试试 删除分支
$ git branch 查看分支,会列出全部的分支,当前分支前面会添加一个星号
注意:假如两个分支都有修改,合并会有冲突。
有点乱么,总结一下:
git checkout master
切换回主分支
git checkout -b dev
建立并切换,至关于如下两条命令 $ git branch dev
$ git checkout dev 切换到dev
git branch 查看全部分支 *表示在当前分支下
修改完成文件后在 dev分支下提交
$ git add README.md
$ git commit -m
"备注"
git branch -d dev 删除dev分支
git merge dev
把dev分支合并到当前分支,dev分支还存在
由于时间关系,后面,还会继续与你们分享分支管理,多人协做,整理经常使用的一些命令。