Git从菜鸟到入门到放弃

来源:互联网 发布:热云数据 编辑:程序博客网 时间:2024/04/18 23:22

Git是一个分布式版本控制软件,最初由Linux之父林纳斯·托瓦兹(Linus Torvalds)创作,于2005年以GPL发布。最初目的是为更好地管理Linux内核开发而设计。应注意的是,这与GNU Interactive Tools[6](一个类似Norton Commander界面的文件管理器)有所不同。

说起Git,人们都会想到SVN,那么他与SVN有什么区别呢,当然了区别很大,而且这种区别也是当今Git比较流行的原因,SVN是一个集中式的版本控制系统,在中央服务器存储版本库,当我们要开发项目的时候,要先从服务拉取项目,所以我们当我们想要最新的版本或者提交都需要通过中央服务器,如果要是没有网络呢又或者是网络太慢呢,那么想必大家此时心中会有一万个羊驼,哈哈,而Git是一种分布式的版本管理系统,它没有中央服务器,每一个人的电脑都是一个版本仓库,这样当我们完成项目的一个模块时,就可以在自己的电脑提交,而且此时操作是不需要网络,因为版本都是在自己的电脑上,那多个人如何协作呢?比如说你在自己的电脑上修改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

Git安装(Windows)

  • Git下载
    Git下载链接https://git-scm.com/downloads,点击下载
    我下载后的版本是这个

    这里写图片描述

    当然根据系统选择是32位还64位,下载之后就很简单了,剩下就是傻瓜式的点击next,然后就会看到

    Git

    此时点击Git Bash就启动了我们的Git,先体验一下,我们在命令行输入下面命令看看安装的版本

  • git –version

    git –version
    这里写图片描述

常用Git操作命令

  • 初始化仓库 git init

    这里写图片描述

    先创建一个我们要管理的项目目录myTestGit,然后命令在此目录下创建仓库,初始化仓库后会在刚刚创建的文件夹下会有一个.git的文件,这个文件就是管理我们的仓库的,所有信息都在里面保存,不要删除该文件。

    这里写图片描述

  • git config –global 配置用户名和邮箱

    这项配置暂时用不到,配置账号和邮箱是当我们提交的时候用于区分提交人信息,便于团队协作。如果设置的话,当我们提交我们的书写的内容时会提示要配置邮箱和账户后才能提交。

    这里写图片描述

  • git status查看状态
    我们现在项目下创建一个README.md文件,里面写上内容Test my first git project,此时我们可执行此命令查看我们项目状态

    这里写图片描述

    我们看到提示,已经添加README.md文件,此时仓库还没有追踪此文件,并且提示我们要用git add 命令将我们的文件添加到暂存区,那么此时我们就按提示操作

  • git add 添加到暂存区

    这里写图片描述

    我们用git add README.md 把我们加的文件放到暂存区。此时我们再用git status 查看,一个新文件假如了暂存区。

  • git commit提交我们的文件

    这里写图片描述

    提交后提示我们master(root-commit),此时在用git status查看提示没有提交,工作区是干净的,代表我们已经把刚才的内容提交了。

  • git log

    这里写图片描述
    此时我们用git log命令就可以看到项目的版本信息,包括提交人,提交时间和修改的文件等信息

GitHub项目托管

GitHub是一个利用Git进行版本控制、专门用于存放软件代码与内容的共享虚拟主机服务。它由GitHub公司(曾称Logical Awesome)的开发者Chris Wanstrath、PJ Hyett和Tom Preston-Werner使用Ruby on Rails编写而成。
GitHub是全球最大的开发者社区,很多有名的开源项目都在GitHub有托管,当然大名鼎鼎的如Google,SQUARE等企业开源项目都在上面,还有很多优秀的个人。

  • 在GitHub创建项目myTestGit

    这里写图片描述

    注册账号后登陆到GitHub,点击如下图右边New repository,然后在创建界面输入仓库名字(账号下项目名字不能重复),下面直接选择public,选择public可以让大家看到,当然如果你不想将自己的项目开源给大家,就需要选择private,当然这个是收费的。选择好后点击Create repository,就成功了。此时该项目就显示在上图Your repository列表中。
    这里写图片描述

  • 本地仓库关联GitHub上的仓库
    现在GitHub打开我们刚刚创建的仓库,然后如下图,用红框标注的地方是就是我们项目的网址,记住此网站用Git命令关联此项目

  • git remote关联仓库

    这里写图片描述
    现在虽然本地项目与GitHub项目已经关联,但是要想将本地更改push到GitHub还需要在本地生成ssh秘钥,配置到GitHub 做一个身份认证的东西.

  • shh-keygen 创建公钥和私钥
    这里写图片描述
    ssh-keygen最后面试配置的邮箱账号执行命令后会让输入密码,直接按Enter键就行了,然后就出现图中形式就代表生成成功,按图中提示去响应目录找到如下图两个文件,两个文件一个id_rsa.pub是保存的公钥。
    这里写图片描述

  • GitHub配置ssh

    这里写图片描述

    登录账号后点击verifying,如上图,选择SSH and GPG keys,然后选择New SSH key创建ssh。如下图,title我们可以随便输入,key就是刚刚我们生成is_ras.pub,文件里生成的公钥,然后点击Add SSH key 就成功了,接下来就可以push我们本地项目了。

  • git push 将本地项目的提交push到GitHub
    执行命令后我们看到提示信息说已经写入成功。
    这里写图片描述

    此时我们再登陆GitHub查看我们的项目此时仓库已经和本地的仓库同步了,看到提交信息是2 days ago,那是因为我在本地提交README.md文件是两天前执行的,这也就更说明Git是分布式,每个电脑都是一个仓库。

    这里写图片描述

    接下来我们在本地仓库README.md里面输入新的一行,内容为add Content 1,然后用git status查看状态
    这里写图片描述

    我们看到我们提示我们更改了内容,那么怎么看我们修改了什么内容呢。可以通过git diff README.md,我们发现在在add content 1前面有一个+号,表示改行是新增加的内容,然后我们再按之前的方式提交我们的修改

    这里写图片描述

版本回退

我们再通过git log 查看下版本

这里写图片描述

  此时我们再注意下,版本是从近到远的顺序显示的,还有一个字段commit 后面是一串16进制数,这个是版本的唯一标示。
  • git log –pretty=oneline
    如果此时感觉git log 显示的内容比较多,可以通过git log –pretty=oneline显示部分信息,如图,只显示版本号和版本描述信息

  • git reset 版本回退
    如果想回退到上一个版本,git reset –hard HEAD~1(想回退几个版本,数字就为几),也可以用命令git reset –hard HEAD^(想回退几个版本,就输入几个^)回退一个版本,

    这里写图片描述
    此时我们再用命令git log –pretty=oneline查看,发现描述信息为commit test content 3 的提交已经没有了。
    这里写图片描述

    那么问题来了,假如我们刚刚发现我们回退错版本了,怎么取消刚才的回退呢,我们发现git log 没有回退的记录。那么命令git reflog就登场了,执行后我们看到了我们执行回退的记录,此时我们可以用命令git reset –hard 44a1b1a
    这里写图片描述
    此时再看版本信息,发现描述信息为commit test content 3 又恢复了。
    这里写图片描述

  • git add .
  • 当我们项目有多个文件要提交时怎么操作呢,我们再项目先创test.txt,test.txt,等文件,如图
    这里写图片描述
    那么此时我们可以按之前方式一个文件一个文件提交,单文件多了终归不是好办法,那么此时应git add .就搞定了
  • git checkout
    此命令可以取消我们工作区的更改(更改后,用git status命令会看到此命令提示)执行命令后,再查看状态发现文件修改内容已经取消了
    这里写图片描述

创建分支

分支一般用于项目模块开发时,给成员分工,不同的人负责不同的模块,也就是管理不同的分支,当完成时一般再与主分支合并。

  • git branch创建分支
    这里写图片描述
    创建分支成功后 查看分支发现master分支前有个*,表示当前操作分支是master。
  • git checkout切换分支
    注意这个切换分支和撤销工作区的修改的区别。切换后效果如下。
    这里写图片描述

    注:创建和切换分支可以直接用git branch -b branchB
    这里写图片描述

    在分支branchB上修改README.md文件,增加一行内容branchB write
    然后查看文件内容,发现已经存在增加的内容,
    这里写图片描述
    然后我们切换到master分支,查看内容发现没有刚才书写的内容
    这里写图片描述
    此时我们可以通过命令git merge branchB,将分支branchB和主分支合并

    这里写图片描述
    当我们合并完成后,也就可理解为branchB的功能模块已经完成,则可以将该分支删除
    这里写图片描述

解决冲突

  • git merge
    先查看原本文件内容,如图
    这里写图片描述
    然后我们再分支branchA编辑文件,内容如下
    这里写图片描述
    再切换到master分支,修改如下内容
    这里写图片描述
    然后将branchA与master分支合并,如图提示合并冲突
    这里写图片描述
    我们打开文件发现 Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,其中< << HEAD是指主分支修改的内容,>>>>>branchA是指branchA上修改的内容。
    这里写图片描述

我们可以修改下如下后保存,并提交解决冲突

分支常见操作

  • git push origin
    之前我们都是在本地创建分支后,并没有将分支推送到gitHub,那么这个命令就可以实现这个功能
    这里写图片描述
    然后在刚创建的分支更改内容并提交
    这里写图片描述
    此时我们登陆GitHub查看分支testbranch有个提交,
    这里写图片描述
    然后我们点击pull request,选择merge
    这里写图片描述
    现在分支提交的内容已经合并到master
  • git push origin :
    合并之后再github可以删除分支,那么用Git命令怎么删除远端仓库的分支呢,那要用到这个命令了
    这里写图片描述

到这里,Git的命令已经介绍了很多了,现在我们在看题目,为何是从入门到放弃,我是感觉Git我们只需要基本了解就可以了,因为Git的命令很多,真正熟练运用,需要花点时间去学习,毕竟命令行没有GitHub客户端操作方便,所以我们只需要去下载GitHub客户端(点击下载),安装成功后我们只需要在客户端就可以完成我们想要的效果,这比命令行方便了很多

比较有名的GitHub分享

国外著名 Android 开发者及公司信息GitHub链接

Avatar Github Blog Description Google Android https://github.com/google http://android-developers.blogspot.com/ Google Android Developers Blog JakeWharton https://github.com/JakeWharton http://jakewharton.com/ ActionBarSherlock, Android-ViewPagerIndicator, Nine Old Androids, butterknife Square https://github.com/square http://square.github.io/ okhttp, fest-android, android-times-square, picasso, dagger, spoon Chris Banes https://github.com/chrisbanes http://chris.banes.me/ ActionBar-PullToRefresh, PhotoView, Android-BitmapCache, Android-PullToRefresh Jeremy Feinstein https://github.com/jfeinstein10 http://jeremyfeinstein.com/ SlidingMenu, JazzyViewPager Sergey Tarasevich https://github.com/nostra13 http://nostra13android.blogspot.com/ Android-Universal-Image-Loader Koushik Dutta https://github.com/koush http://koush.com/ Superuser, AndroidAsync, UrlImageViewHelper Simon Vig https://github.com/SimonVT http://simonvt.net/ android-menudrawer, MessageBar Cyril Mottier https://github.com/cyrilmottier http://cyrilmottier.com/ GreenDroid, Polaris Emil Sjolander https://github.com/emilsjolander http://emilsjolander.se/ StickyListHeaders, sprinkles, android-FlipView James Smith https://github.com/loopj http://loopj.com android-async-http Manuel Peinado https://github.com/ManuelPeinado FadingActionBar, GlassActionBar, RefreshActionItem, QuickReturnHeader greenrobot https://github.com/greenrobot http://greenrobot.de/ greenDAO, EventBus Jeff Gilfelt https://github.com/jgilfelt http://jeffgilfelt.com android-mapviewballoons, android-viewbadger, android-actionbarstylegenerator, android-sqlite-asset-helper Roman Nurik https://github.com/romannurik http://roman.nurik.net/ muzei, Android-SwipeToDismiss Flavien Laurent https://github.com/flavienlaurent http://www.flavienlaurent.com NotBoringActionBar, datetimepicker, discrollview Gabriele Mariotti https://github.com/gabrielemariotti http://gmariotti.blogspot.it cardslib, colorpickercollection sephiroth74 https://github.com/sephiroth74 http://www.sephiroth.it/ ImageViewZoom, HorizontalVariableListView, AndroidWheel, purePDF Romain Guy https://github.com/romainguy http://www.curious-creature.org ViewServer Kevin Sawicki https://github.com/kevinsawicki https://twitter.com/kevinsawicki http-request Christopher Jenkins https://github.com/chrisjenx http://about.me/chris.jenkins Calligraphy, ParallaxScrollView Javier Pardo https://github.com/jpardogo http://jpardogo.com ListBuddies, FlabbyListView, GoogleProgressBar, FadingActionBar Chet Haase http://graphics-geek.blogspot.com/ Android framework UI team Matthias Käppler https://github.com/mttkay http://mttkay.github.io/ signpost Daniel Lew https://github.com/dlew http://blog.danlew.net/ Android Tips FaceBook https://github.com/facebook https://code.facebook.com/mobile/ buck Code Zen http://arpitonline.com/ iOS Android Styling Android Google Plus https://blog.stylingandroid.com/ A techical guide to to improving the UI and UX Android apps

中国部分 Android 开发者GitHub链接

昵称 GitHub 博客 介绍 罗升阳 Luoshengyang@csdn Android 源码分析 邓凡平 innost@csdn 阿拉神农 魏祝林 android_tutor@csdn Trinea trinea trinea.cn 性能优化 开源项目 halzhang halzhang halzhang@cnblogs StartNews作者 wyouflf wyouflf wyouflf@oschina xUtils作者 张兴业 xyz_lmn@csdn 代码家 daimajia daimajia.com stormzhang stormzhang stormzhang 9Gag作者 AndroidDesign Love开源 郭霖 guolin_blog@csdn hanyonglu hanyonglu@cnblogs Android动画与推送 闷瓜蛋子 fookwood.com 云OS开发 傲慢的上校 lilu_leo@csdn youxiachai youxiachai dodola dodola Issacw0ng Issacw0ng imid.me mcxiaoke mcxiaoke soarcn soarcn 谦虚的天下 qianxudetianxia@cnblogs 李华明Himi xiaominghimi@csdn yangfuhai yangfuhai afinal 作者 张国威 hellogv@csdn 程序媛念茜 yiyaaixuexi@csdn wangjinyu501 wangjinyu501@csdn ASCE1885 asce1885@csdn qinjuning qinjuning@csdn 秋风的博客 tangcheng_ok@csdn 任玉刚 singwhatiwanna singwhatiwanna@csdn 农民伯伯 over140 over140 开源播放器 Android 中文 api 李宏伟 lihw paper3d.net Paper3D 代震军 daizhenjun daizhj@cnblogs ImageFilter库 sunzn sunzn@cnblogs Android 基础开发知识 pedant pedant 书呆子精神院 SweetAlertDialog、安全与逆向 androidyue androidyue 技术小黑屋 Android,Java研究 Hongyang hongyangAndroid Hongyang Android 大头鬼 Bruce Lee 大头鬼Bruce Android, RxJava markzhai markzhai markzhai的博客 Android
1 0
原创粉丝点击