首先声明:这不是一篇git使用手册或者指南,如果要详细的git使用指南,下面是廖雪峰的git教程,可以系统学习廖雪峰的git教程,当然,如果你想马上以一种正确的方式使用git,那么接下来你很快就会学会如何正确使用.前提是你已经知道git这个工具.并且想用它来管理你的代码.

在继续往下读之前,你需要确定两件事.

1:你的电脑上已经安装git,如果没有,照着这个方法去装:git安装

2:你已经拥有一个github账号,当然我也是github的账号.没有的话那就申请一个.

一:版本库的建立

1:首先我需要在我的github账号上新创建一个我的”远程仓库”,名叫”pragit”



2:我在我的家目录下创建了一个名叫git的目录,在它下面我又继续创建了两个目录,一个叫init(表示我要从本地建立仓库),一个叫clone(表示这个仓库是我克隆来的).

3:直接克隆到本地,切换到clone目录中.执行下面操作就可以(推荐使用)

4:直接从本地初始化,我们进入init目录中,然后执行下面操作,最后我们将远程仓库中的README.md拷贝到我们的本地.



好的,这就是我们建立版本库的两种方式啦,个人更推荐第一种方式:简单,安全,省事.

二:本地的各种修改

之所以叫本地的各种修改,原因是这部分我们都是在未push到远程仓库之前所干的活或者会犯的错误,我们需要有这样的概念,有关git的几个区域.

工作目录:就是我当前代码保存的目录,比如上图中的/home/student/git/init目录,那就是我的一个工作区.

暂存区:执行git add 命令之后,我们的代码就会到这个暂存区中去,等待被commit

本地仓库:每当我们执行一次git commit的时候,会将现在暂存区域中所有代码放到我们的本地仓库.

远程仓库:就是github上我们的仓库,执行git push 就是将本地仓库中的东西提交到远程仓库.

来来来,直接上图:

1:一次正确的提交,我下面就以提交file为例,执行完成后,你的代码就在github远程仓库里了.

2:多次修改,版本回退,撤回操作,删除文件,添加”.gitignore”文件

  • 多次修改:假设你已经将file1文件 commit到本地仓库了,但是你又修改了它,那么我们git status 会得到”modified”提醒,git diff 命令可以帮助我们发现不同,解决方法,要是这种修改是你本身主动的,那么再次add就好.要是是你无意中改的,下面图片就能解决问题.

  • 版本回退:我们继续修改file1的内容,继续提交,再修改,再提交,我们每次commit的版本都会作为一个版本保存起来,当然,如果我们commit上千次,那么这么多版本我们自己肯定记不住,这时候git log 命令横空出世解决了这个问题.而且我们可以用git reset –hard ID(版本号码) ,当然还有git reflog来查看我的命令历史.下面我们回退一个版本.

    注意:我们将有”+++something”的版本回退到”++something”的版本,顺便解释下ID,就是我们git log 中commit那一行的前六位.

  • 撤回操作:我们再次修改file1文件,然后我们push add ,但是此时我们反悔了,我们不想add他们了,我们就可以执行下面操作,这样会回到我们的第一种情况,再按照第一次的方法执行就好,注意git reset HEAD file1 命令.

  • 删除文件:我们经常会在目录下删除不想要的文件,但是要是文件被我们add之后或者commit之后怎么办呢,我们先来看下会怎么样,我们以删除file1文件为例:

    看到了吧,效果就是它会提醒你可以放弃你刚才的操作,当然你也可以直接git rm file1 删除文件,但是我们需要将这个修改的结果commit到我们的本地仓库来更新我们的本地仓库.这样才能保证暂存区和仓库的信息一致呀.如下:

  • 添加”.gitignore”文件:为了让我们的github远程仓库不那么乱,便于别人或自己看,即不想出现一些例如a.out的文件,那么我们可以编写一个”.gitignore”文件传上去,这样,我们以后要是add这种文件,git 默认不会添加,但是用”-f”参数也可以强制添加.

三:分支管理

正确的多人协作开发产品的方法是我们会有一个master主分支作为我们的版本发布,我们工作的分支假设叫workbranch,那么我们几乎每个开发人员完成的代码都会提交到workbranch上,但是我自己要是直接在workbranch上工作,那么要是我的代码某天未完成(BOSS要求每天都有工作进度,就是每天有提交记录),那我要是提交到workbranch,其他人是无法工作的,那么解决方法就是我在我的本地再次分出一个yang分支,我自己去工作,要某部分代码要好几天完成,那我就每天提交到我的yang分支,全部完成之后在提交到workbranch,这样我每天的工作进度也就有了.下面我创建一个workbranch分支和yang分支,然后在yang分支上修改file,再演示几种不同情况:

  • 正常被合并:我们在yang分支上的修改在yang上可见,但是在别的分支上就是不可见的,但是当我们切换到别的分支的时候会有提醒,所以我们合并就好了

    注意:

    git branch 查看目前分支

    git branch 分支名 可以创建一个分支,但是不会切换过去

    git checkout -b 分支名 不仅创建分支,而且切换到这个分支

    git checkout 分支名 切换到这个分支

    git branch -d 分支名 删除这个分支

    git branch -D 分支名 强行删除这个分支

    git merge 合并分支.

    好,我们继续,下面我们就去在master主分支上合并yang分支,最后我们可以看到file的内容已经由”hello”变成了”nihao”.

  • 手动合并冲突:当我们刚才在分支yang上修改过file的内容之后,我们再次切换到master主分支,未知情况下又修改,当然,这种情况肯定发生在你和同事之间,git此时会智能的提醒我们有冲突.git status 会显示冲突位置.



    那么我们再次手动修改file文件,解决冲突,然后add ,commit之后就好了.当然我们还会遇到这样的问题,要是我们的同事已经将file修改并且从他那里push到我们的远程仓库了,当我们再次修改file并且push,此时会提醒我们有冲突,我们需要git pull 将最新的东西拉倒我们的本地,然后手动解决冲突就行了.

之后我们从另一个目录模仿你处理同事已经修改过的file

  • 遇到bug怎么办:简单的一句话,我们遇到bug之后,自己重新建立一个分支,我们对于这种解决bug的分支就叫bug分支,自己单独去修复bug,然后合并,之后删除bug分支就行了,一般遇到问题都是这样处理的.

四:github多人协作的使用

当然git是一个多人使用的工具,我们用它来协同开发项目,这样才能体现它的强大与方便,下面以我们小组现在正在一起写的一本开源书籍(Linux-Book)为例,欢迎大家积极fork之后修改,如果合理,将被采纳,为大家介绍fithub多人协作的使用.

1:首先欢神(一个屌屌的学长)需要在小组的github上建立我们的版本库

2:我如果要参与,就需要将它从小组的github账号上fork下来.就是图片右上角的”Fork”



3:然后我就可以在自己的github上看到这个仓库了.如图所示



4:接下来我就不用多说了吧,两种方式在本地建立自己的版本库,我比较推荐第一种克隆的方式(注意:一定要在自己的github账号下克隆,否则你没有权限push东西上去).好,我现在已经克隆好了.



5:现在的操作无非就是我们第二大点写的各种在本地的操作,就不用多说了,假设我现在写了一个文件file,push之后会到我的远程仓库,那我应该怎样合并到小组github上呢,这就需要我们pull requests,相当于我发送一个提交的请求给欢神,他要是觉得可以通过,那么他就回merge我的东西,这样,我写的东西就会在小组github上了.如下所示:



然后我去自己的github账号建立pull requests.可以看到file刚被push上来,Pull requests 很容易找到,右边图标列的第一个就是.



时候我建立pull requests ,注意这里选择的时候, “head fork” 始终表示最新的东西,”base fork”表示要求同步的,即落后的,我现在自己添加了file,小组的github上仓库相对于我的已经落后,那我就让我的作为”head fork”,这样点绿色按钮创建Pull requests之后,欢神就会看见



6:要是别的小伙伴更改了东西,欢神同意之后,我的版本库就是落后的了,方法一样,继续Pull requests,只是变一下”head fork” 和 “base fork “就好了,git会自动检测不同,然后merge,之后在你本地执行 ” git pull “命令,将自己的远程仓库和本地仓库同步就行了.

好了,如果你一直读到了这儿,那么我相信你可以以一种正确的方法去使用git,当然,这个神奇的工具还有好多地方我没有说到,比如它的标签管理等等,但是我已经说过这不是教程啦,希望对你有帮助,也希望你积极评论,欢迎一起交流技术.

版权声明:本文为博主原创文章,未经博主允许不得转载。

小杨同学git使用记(适合使用过git但是不熟练的童鞋)的更多相关文章

  1. 小杜同学关于Query的一点知识

    小杜同学关于jQuery的一点知识 1.关于jQuery jQuery就是一个JavaScript的函数库.既然是JS的的函数库,它自然是做JS做的东西了.毕竟jQuery只是用JavaScript编 ...

  2. VSCode配置Git随记

    VSCode配置Git随记 2018年05月29日 10:14:24 Dominic- 阅读数:4096   vscode中对git进行了集成,很多操作只需点击就能操作,无需写一些git指令. 不过这 ...

  3. git基本操作(适合新手)

    本人也是刚刚开始学习 大家可以一起交流,大佬可以在教一下 目录 git配置 git本地仓库 SSH提交方式,git提交远程仓库 一.git配置 git config --global user.nam ...

  4. 记一次删除Git记录中的大文件的过程

    app/test/target/ #查看大文件 git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/ ...

  5. 记一次使用git报错,解决Unable to negotiate with **** port 22: no matching host key type found. Their offer: ssh-rsa

    windows电脑重装系统,去官网下载了最新的git安装,一路next下来,打开bash按老路子设置,生成公钥 git config --global user.name "yourname ...

  6. Git详解之五:分布式Git

    为了便于项目中的所有开发者分享代码,我们准备好了一台服务器存放远程 Git 仓库.经过前面几章的学习,我们已经学会了一些基本的本地工作流程中所需用到的命令.接下来,我们要学习下如何利用 Git 来组织 ...

  7. Git详解之二:Git基础

    Git 基础 读完本章你就能上手使用 Git 了(伯乐在线注:如果你对Git还不了解,建议从本Git系列第一篇文章开始阅读).本章将介绍几个最基本的,也是最常用的 Git 命令,以后绝大多数时间里用到 ...

  8. Git学习笔记(一)Git初识及基本操作

    详细完整教程:官方文档,廖神Git教程,武sir 一.什么是Git? 定义:Git是分布式版本控制系统. 1.1什么是版本控制 我们可以回想以下,在我们上学毕业要写论文或是准备一份演讲稿的时候,都会用 ...

  9. Git入门教程,详解Git文件的四大状态

    大家好,欢迎来到周一git专题. git clone 在上一篇文章当中我们聊了怎么在github当中创建一个属于自己的项目(repository),简称repo.除了建立自己的repo之外,我们更多的 ...

随机推荐

  1. bigworld源码分析(5)——BaseApp分析

    BaseApp负载部分,核心代码缺失...网上的源码中都找不到,暂时没办法分析其核心内容,很遗憾,继续寻找吧,等找到了,再继续自己的分析.

  2. Spring 和SpringMVC 的父子容器关系

      Spring和SpringMVC作为Bean管理容器和MVC层的默认框架,已被众多WEB应用采用,而实际使用时,由于有了强大的注解功能,很多基于XML的配置方式已经被替代,但是在实际项目中,同时配 ...

  3. C/C++ 网络库介绍

    C/C++ 网络库介绍 Aggregated List of Libraries(Source Link) Boost.Asio is really good. Asio is also availa ...

  4. JSP基础总结 脚本元素

    JSP脚本元素 1.  JSP声明语句 JSP声明语句以<%!开始,以%>结束,其语法格式为:<%! 声明语句 %> 使用声明语句的变量为全局变量,也就是说,当有多个用户在执行 ...

  5. iTunesConnect进行App转移2-官方说明

    Can I transfer an app to another developer's iTunes Connect account? Yes, you can transfer your app ...

  6. [JSOI2008][BZOJ1012] 最大数(动态开点线段树)

    题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前数列的长度. 2. 插入操作 ...

  7. Oracle学习系列7

    Oracle学习系列7 ************************************************************************************ 关联表 ...

  8. Logistic回归原理及公式推导[转]

    原文见 http://blog.csdn.net/acdreamers/article/details/27365941 Logistic回归为概率型非线性回归模型,是研究二分类观察结果与一些影响因素 ...

  9. ps6 安装失败-FATAL: Payload '{3F023875-4A52-4605-9DB6-A88D4A813E8D} Camera Profiles Installer 6.0.98.0' information not found in Media_db.

    点击 '错误摘要' Exit Code: 34 -------------------------------------- Summary ----------------------------- ...

  10. 配置recovery_min_apply_delay后重启standby节点报错:psql: FATAL: the database system is starting up

    环境: pg版本:PostgreSQL 9.4.4 on x86_64 系统版本:CentOS release 6.6 linux内核版本:2.6.32-504.8.1.el6.x86_64 今天测试 ...