首先声明:这不是一篇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. django允许跨域备忘笔记

    详细信息请拜读网址:https://github.com/ottoyiu/django-cors-headers/ 安装: 在virtaulenv环境中执行 pip install django-co ...

  2. POJ 1637 Sightseeing tour (混合图欧拉路判定)

    Sightseeing tour Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6986   Accepted: 2901 ...

  3. PyCharm5.0.2最新版破解注册激活码(图文版)

    下载PyCharm http://download-cf.jetbrains.com/python/pycharm-professional-5.0.2.exe 安装PyCharm 设置激活服务器   ...

  4. Debugging Process Startup

    Debugging Process Startup Q:  How do I debug a process's startup code? A: This depends on how the pr ...

  5. Python12期培训班-day1-登陆验证代码分享

    #!/usr/bin/env python import sys import getpass afile = 'afile' bfile = 'bfile' circulation_num=0 #循 ...

  6. 用文件模拟CMOS保存数据

    Hi3520D 芯片的内置CMOS最多只有5个字节可以用,但是我需要保存的数据有很多. 其中一个解决办法是:可以把其他需要保存的数据放到一个配置文件中.每次写的时候写到配置文件,用的时候再从配置文件读 ...

  7. unity中全屏背景图缩放

    using UnityEngine; using System.Collections; public class BgPicScript : MonoBehaviour { // Use this ...

  8. postman 添加环境变量 并 读取变量 作为参数 传入,跑整个场景

    上篇文章 写了 postman 基本使用 和 检查点. 这篇 记录一下 多个测试用例组成的一个场景下. 如何通过读取变量跑完整个场景. 因为有些场景 的用例是彼此关联的. 所以通过参数来实现. 如 我 ...

  9. HttpClient_4 用法 由HttpClient_3 升级到 HttpClient_4 必看

    转自:http://www.blogjava.net/stevenjohn/archive/2012/09/26/388609.html HttpClient程序包是一个实现了 HTTP 协议的客户端 ...

  10. python语言switch-case

    初学python语言,竟然很久才发现python没有switch-case语句,查看官方文档说是可以用if-elseif-elseif....代替. 讲真,这都不是问题.不就是一个条件判断吗.用if- ...