Git入门学习记录
来源:互联网 发布:英国皇家芭蕾舞团 知乎 编辑:程序博客网 时间:2024/06/05 20:23
git教程来自:廖雪峰的git教程。
教程里面有下载路径,不过这里还是再贴一份吧。(国内镜像)
这里说两句趣谈,当然也是从教程里看到的,真的没想到git
的诞生是因为:
开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情况是这样的:Linus(那个写了Linux
的男人)花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。
集中式VS分布式
在这里版本控制的意思是:我经常改我写的东西(别人也会改),而且我也不知道这次改了对不对,但是不改就不知道对错,那就很头疼了。万一改错了我得回滚,但是改的次数多了就不知道自己回滚的那一版对不对了,这个时候就出现了版本控制系统了,他可能帮你把每次的修改都记录下来,还可以附加一句话说明你改了什么地方,让你可以随时准确的回滚到你想要的版本。
- 集中式
集中式的概念是:代码托管在一台专门的机器上(中央服务器),大家一起修改的时候,都像这台机器提交修改内容,别人想要你的最新的内容,也是去“中央服务器”上更新。这样做带来的问题就是大家都必须联网才能提交和更新,另外就是如果大家的网速差或者“中央服务器”的访问速度很慢,那我们更新内容的时候就得一直等着了,这样会影响效率的。另外一点就是“中央服务器”出了问题,那大家就都没的玩了。 - 分布式
和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。
分布式的介绍不是很清楚,我个人觉得关于分布式大家可以看看专门去了解一下分布式的意义。
当然说这些话的目的就是告诉你,git真的很好用。
这之后的内容因为博主个人的原因,就只会记录一些git的命令,主要方便自己查阅,如果看到这里的朋友真的想要学习git的话,可以去博客刚开始的链接里学习,讲的非常帮。
创建git
仓库
$ git init #将当前目录作为git仓库,并且当前目录会多一个`.git`的子目录
添加文件到Git
仓库:
- 使用命令
git add <file>
,可多次使用,反复提交 - 使用命令
git commit
,提交,完成添加操作
git status #查看git当前工作区的状态git diff <file> #查看文件与仓库中的版本有何不同,只能查看未提交但修改了的文件
版本回退
$ git log #显示从最近到最远的提交日志commit 3628164fb26d48395383f8f31179f24e0882e1e0Author: Michael Liao <askxuefeng@gmail.com>Date: Tue Aug 20 15:11:49 2013 +0800 append GPLcommit ea34578d5496d7dd233c827ed32a8cd576c5ee85Author: Michael Liao <askxuefeng@gmail.com>Date: Tue Aug 20 14:53:12 2013 +0800 add distributedcommit cb926e7ea50ad11b8f9e909c05226233bf755030Author: Michael Liao <askxuefeng@gmail.com>Date: Mon Aug 19 17:51:55 2013 +0800 wrote a readme file
简易版
$ git log --pretty=oneline #显示提交日志,每次提交的日志只占一行,前面的值是commit id3628164fb26d48395383f8f31179f24e0882e1e0 append GPLea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributedcb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file
$ git reset --hard HEAD^ #回退到上一个版本,上上个版本是HEAD^^,上100个版本是HEAD~100
$ git reflog #记录每一次的命令ea34578 HEAD@{0}: reset: moving to HEAD^3628164 HEAD@{1}: commit: append GPLea34578 HEAD@{2}: commit: add distributedcb926e7 HEAD@{3}: commit (initial): wrote a readme file
撤销修改
首先介绍一下工作区和暂存区,版本库的概念。
详细介绍:看这里
撤销修改的内容
$ git checkout -- file #把文件在工作区的修改全部撤销,回退到最近一次git add或git commit的版本
$ git reset HEAD file #撤销文件在暂存区的修改,重新放回工作区
删除
$ git rm file #从版本库中删除文件$ git commit -m "" #两步操作一起做,才能让工作区变得干净
Git关联远程库
git
关联github
仓库:看这里
git remote add origin git@server-name:path/repo-name.git #关联远程库git push -u origin master #关联后,第一次推送master分支的所有内容git push origin master #本地提交后,如果有必要,推送到远程库
从远程库克隆到本地
$ git clone git@github.com:michaelliao/gitskills.git #拿廖老师的教程做个实例Cloning into 'gitskills'...remote: Counting objects: 3, done.remote: Total 3 (delta 0), reused 0 (delta 0)Receiving objects: 100% (3/3), done.$ cd gitskills$ lsREADME.md
Git分支管理
git branch #查看分支git branch <name> #创建分支git checkout <name> #切换分支git chechout -b <name> #创建+切换分支git merge <name> #合并某分支到当前分支git branch -d <name> #删除指定分支
Git分支冲突
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成git log --graph #可以查看分支合并图
git merge --no-ff dev #合并分支(禁用fast forward),可以看出来合并过有新的commit
Bug分支
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash
一下,然后去修复bug,修复后,再git stash pop
,回到工作现场。
删除分支
开发一个新feature,最好新建一个分支
git branch -D <name> #强行删除一个分支
多人与远程库的交互操作
- 查看远程库信息,使用
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
,如果有冲突,要先处理冲突。
Git标签
git tag <name> #新建一个标签,默认是为HEAD,也可以指定其他commitgit tag -a <tagname> -m "blablabla..." #指定标签信息git tag -s <tagname> -m "blablabla..." #使用PGP签名git tag #查看所有标签git push origin <name> #推送指定本地标签git push origin --tags #推送所有未推送的本地标签git tag -d <name> #删除一个本地标签git push origin:refs/tags/<tagname> #删除一个远程标签
- Git入门学习记录
- Git入门学习记录
- 记录学习的点滴(Git入门)
- Git设置及GitHub使用的入门学习记录
- git 学习记录
- Git学习记录
- Git学习记录
- git学习记录
- git 学习记录
- git学习使用记录
- Git学习记录
- git学习记录
- Git学习记录
- git学习教程记录
- git学习记录
- Git学习记录(一)
- git学习记录--merge
- GIT 学习记录
- bzoj2083 [POI2004]PRZ 状压DP
- ASP.NET MVC中的Area区域简介
- 二叉树顺序结构
- Android 蓝牙开发(一)蓝牙通信
- 通过Intent启动Activity、获取Activity返回值
- Git入门学习记录
- unity ios打包提示Apple Mach-O Linker (Id) Errors
- JavaScript学习第一天
- spring整合RMI实现Java远程方法调用
- 数据库测试
- 【洛谷 1218】[USACO1.5]特殊的质数肋骨 Superprime Rib
- 数据结构 冒泡排序
- 什么是内存泄漏?野指针?悬挂指针?空指针异常?
- java 开始学习,输入Welcome to java