花了两天时间专门搞了一下git。整理一下分享给大家。以下我们開始。。

一.学习使用git之前的准备(Windows环境下)。

  • 在本地装一个git,并装上GitBash。(不会?会装QQ就会装git。。

    )

  • 去GitHub官网上注冊一个账号。

    给个传送门GitHub官网

二.做好准备之后,咱们先来扫一下盲。讲讲概念。

  • git和GitHub有什么差别?(已泪奔。。。



    答:git是本地代码版本号管理工具,我们写项目时,难免会要进行代码管理吧。比方我们每天写完代码之后,总要把它备份一份吧,原因非常easy。万一你的工作空间(workspace)所在的硬盘突然挂了呢,不要说几率非常小。可是,万一发生呢。



    我们总能感觉到git和GitHub之间好像是有什么关系。上面我们提到,git是本地代码管理工具。为了防止我们的工作空间(workspace)所在的硬盘突然挂掉。可是,你就不操心整块硬盘都挂了吗。。

    当然,这仅仅是个小概率事件。更重要的是:我们在团队开发时,须要多人合作开发同一个软件,不可能我写了代码拷给你,你写了代码拷给我吧。我们须要一个统一的远程版本号控制仓库:GitHub

三.我们開始GitHub之旅。

1.首先解释几个单词的意思(⊙o⊙)…

后面会用到的。并且非常重要的:

  • pull:拉
  • push:推
  • repository:仓库
  • branch:分支
  • status:状态
  • commit:提交
  • config:配置
  • global:全局的(属性,变量等)

2.画一张图来解释git本地操作,以及远程操作的逻辑流程

  • 从上图中能够看出。我们日常编码时。首先是把工作空间里的更改的代码通过操作①来推送到暂存区(index。stage),然后假设我们确认这些代码正确。无须改动。那么就能够把它通过②推送给本地master分支。这里我们能够把master分支理解成本地的暂时仓库,我们能够从这里恢复代码,也能够通过这个分支进行提交到远程GitHub上的master分支,把你的代码提供给别人。

  • 上图我们仅仅是描写叙述了由本地逐步推向远程的过程。我们先将这个高明确,后面我会反过来再操作一遍。

3.我们先实现步骤①

1.假设我们对代码进行了更改。这里我们以一个文件readme.txt为例。来解说。

(也就是说我们如今工作区间假设是E://firstrep。里面有一个文件readme.txt)

2.首先我们打开D://firstrep。在该文件夹下在空白处点击右键打开给Git Bash.exe,初始化一个本地仓库。

Administrator@HJQ1EBGYSWRMA1K /e/firstrep

$ git init

Initialized empty Git repository in E:/firstrep/.git/(master)

注意:仅仅有以“$”开头的才是我们写的命令。其它的都是系统自己主动生成的提示信息,当中运行初始化命令之后我们能够看到路径名后面多了一个“master“,这说明我们初始化成功。

3.我们如今来找一下工作区间,版本号库,暂存区,以及本地master分支

  • 工作空间:E:/firstrep

  • 版本号库:E:/firstrep/.git/(master)注意,这里.git文件夹是隐藏的,不可见,能够更改文件夹属性使其显现出来。

  • 暂存区和master分支:这两个东西都存在版本号库文件夹下

4.我们先对该文件进行更改:

git is very easy.

然后。我们把它提交到版本号库的暂存区里(index,stage),运行例如以下代码,查看git状态

$ git status

On branch master

Initial commit

Untracked files:

(use “git add …” to include in what will be committed)

   readme.txt

nothing added to commit but untracked files present (use “git >add” to track)

这里会提示我们说:在工作空间多了一个文件。我们还没有加入到版本号库

5.以下我们把它加到版本号库里的暂存区。

git add –all

这样,我们第①个环节已经运行结束。

4.以下我们来运行步骤②

1.我们刚刚把更改的readme.txt.加入到暂存区(index。stage),如今我们把再把它加到本地master分支。

$ git commit -m “測试

[master (root-commit) 74c27df] 測试

1 file changed, 1 insertion(+)

create mode 100644 readme.txt

我们如今通过上面一行命令。讲readme.txt提交到本地master分支(事实上这么说不是非常准确,事实上提交的是改动。而不是全部内容。这里我们能够先这么简单地理解)。以下我们来查看一下git的状态

$ git status

On branch master

nothing to commit, working directory clean

OK。至此,我们已经成功完毕了本地代码的提交。

即①②两步。

以下我们进行第三部。

5.运行步骤③

如今应该是远程有一个分支,本地有一个分支,我们在GitHub创建一个仓库(repository)。假设仓库地址为:https://github.com/hellochillax/Yard.git

以下我们进行推送:

1.加入远程仓库的地址:

$ git remote add origin https://github.com/hellochillax/Yard.git

这里就产生了一个相应关系:origin–>https://github.com/hellochillax/Yard.git

2.进行推送操作:

$git push origin master

然后系统会提示你输入GitHub的账号password,输入正确的账号password后。点击回车,系统就会进行提交工作。并且会显示运行进度。当然,我这里就不演示了,以防把我原来的项目覆盖掉了。(上面的GitHub地址是我在GitHub上的一个项目,不可随便推。。。当然你看到这里也别想着去搞破坏,由于你不知道我的GitHub的账号password。

。。)

我们上面全部的内容攻克了本地推送到GitHub。以下我们发过来解说从GitHub上拉取被人写的内容到本地仓库。

6.我们还是先搞一张图,有句话说的好。没图你说个。**

以下。我们还是分三步来讲:

7.运行步骤①

有了上面的经验,我们就能够快一点了~

上命令:

$ git pull origin master

上面的命令是,从远程拉取文件到本地。(相同的。我就不点回车给大家演示了

8.运行步骤②③

在运行之前。我们先查看一下git的状态:

$ git status

On branch master

nothing to commit, working directory clean

呦呦呦,什么情况,怎么是“nothing to commit”呢。怎么回事,不应该是再从版本号库中复制内容到工作空间吗,怎么能是不须要提交呢。

别急。你打开工作文件夹,发现。工作文件夹里已经存在了GitHub上的全部文件。

也就是说,步骤①,事实上已经帮我们搞定了①②③要做的事。所以,②③步骤事实上不要我们做不论什么事情。。

四.git的使用之细节补充

  1. 我们要养成一个好的习惯,每天晚上关电脑之前,记得把自己白天写的代码推送到GitHub上,以防自己的劳动果实丢失。尽管几率非常小,但这不失为一个好习惯。这里要特别提一点,GitHub上的仓库是public的(免费版),也就是说,假设你不想公开你的代码。就别轻易放在GitHub上,或者花钱买个私有的仓库。

  2. git的知识点非常多。使用细节也非常多。我这里仅仅是把两个大流程给说了一遍,事实上git是非常强大的。使用起来还是有非常多须要学的,比方多分支管理,冲突解决,git与eclipse或者intellij结合等。可是相同是遵从二八原理,仅仅有20%的操作是我们经经常使用到的,所以,假设你看到如今感觉难度一般般。那么你还是非常不错的。毕竟我的表达能力不是一般的一般般。。。
  3. 博客写的比較少,内容难免多有不当之处,还望各位批评指正。希望本博客会给你提供一定的帮助,这也是我写博客的目的了。

五.最后贴一下我平时总结的git经常使用操作

  • git init 初始化一个本地仓库

  • git add –all 加入全部文件到暂存区(stage,index)

  • git commit -m “描写叙述信息” 提交更改到本地master分支

  • git status 查看git当前状态

  • git diff 查看改动后和改动前的不同之处

  • git log 获得文件更改的历史记录

  • git reset –hard HEAD^ 回退本地分支到上一个版本号

  • git reset –hard HEAD~n 回退本地分支到上n个版本号

  • git checkout – readme.txt:把readme.txt文件在工作区的改动全部撤销

  • git remote :获得远程库列表

  • git remote -v :获得远程仓库的具体信息
  • git remote rm [name] :删除相应的远程库
  • git remote add origin git@github.com/hellochillax/SoftWareYard.git 关联一个远程库
  • git push -u origin master 第一次推送master分支的全部内容
  • git push origin master 推送最新改动
  • git branch -u origin/master master 本地跟踪远程

    Git鼓舞大量使用分支:

    查看分支:git branch

    创建分支:git branch

    切换分支:git checkout

    创建+切换分支:git checkout -b

    合并某分支到当前分支:git merge

    删除分支:git branch -d

  • ssh-keygen -t rsa -C “hello@example.com” 创建SSH Key

  • git config –global user.name “Your Name” 设置username
  • git config –global user.email “email@example.com” 设置password

命令行通用操作:

pwd:显示当前路径

ls -ah:显示文件列表(包含隐藏文件)

cat readme.txt:显示文件内容

rm readme.txt: 删除文件

==========================我是华丽的分隔符==========================================

时间过得真快,转眼半年多过去了。实验室里的人都在忙着各种内推面试。

我也不例外。总体复习啊。这样的酸爽。

本来能够不用考虑git的。可是内推时手残在简历的个人技能部分写了一句“熟悉git、svn等版本号管理工具。

”所以还是再来复习一下git,并且再补充一点半年前没有提到的知识点。

也算为了面试官问到时能不掉链子了。

git的基本知识和经常使用命令,上次都写得几乎相同了。

这次讲讲git分支的合并。

一. fetch和pull的差别。

这两个命令的功能都是从远程的分支获取最新的版本号到本地。可是有一定的差别。

  • 1.git fetch:相当于是从远程获取最新版本号到本地。不会自己主动merge
  • 2.git pull:相当于是从远程获取最新版本号并merge到本地

我们能够用以下的三个命令来体会二者的差别:

git fetch origin master:tmp

git diff tmp

git merge tmp

在实际使用中,git fetch更安全一些

由于在merge前,我们能够查看更新情况,然后再决定是否合并.

二. merge和rebase的差别。

关于这个问题,在stackoverflow上有个非常清晰明了的解释,感兴趣的能够看一下:http://stackoverflow.com/questions/16666089/whats-the-difference-between-git-merge-and-git-rebase

貌似须要梯子才干看。

没梯子也没关系,我把内容翻译一遍。

首先,假设我们的版本号库眼下有三个提交。A,B,C,如图:

然后,此时有两个开发人员同一时候开发,当中小王开发了D,小李开发了E,如图:

非常显然,眼下已经发生了冲突(合并时出现故障),我们解决这个冲突,有两种方法:merge和rebase。

假设採用merge:

假设採用rebase:

可是。有个小问题:採用rebase时。可能会使虚线部分的提交丢失。所以有一定风险性,建议新手都用merge。

Git--团队开发必备神器的更多相关文章

  1. Unity3D开发必备神器(Visual Studio Tools for Unity)

    Unity3D开发必备神器(Visual Studio Tools for Unity) 开发Unity3D程序你用的什么IDE呢? 1.MonoDevelop 2.VS 可能你的回答是这样的,我用的 ...

  2. git 团队开发常用操作流程(适用于 gogs、gitlab、github)

    git 团队开发常用操作流程(适用于 gogs.gitlab.github) NO1 项目构建者 (1)在远程仓库创建仓库 (2)将伙伴添加到仓库合作者中(无先后要求) (2)cd 到项目将要存放项目 ...

  3. mvn 的 provided 以及 test等等 还有git团队开发技巧

    mvn 的 provided 以及 test等等 还有git团队开发技巧

  4. GIT团队开发操作

    01. 建立代码仓库(专门用于团队开发的代码仓库) ========================================================================== ...

  5. webstorm git团队开发技巧总结(一)

    ---恢复内容开始--- 1.git查看和修改用户名,邮箱 用户名和邮箱地址是本地git客户端的一个变量,不随git库而改变.每次commit都会用用户名和邮箱记录. (1)查看用户名和地址 git ...

  6. git团队开发

    用git有一年了,下面是我这一年来的git使用总结,覆盖了日常使用中绝大多数的场景.嗯,至少是够用一年了,整理出来分享给大家,不明白的地方可以回复交流. git设置关闭自动换行 git config ...

  7. 跟我从零基础学习Unity3D开发--Unity3D开发必备神器(Visual Studio Tools for Unity)

    开发Unity3D程序你用的什么IDE呢? 1.MonoDevelop 2.VS 可能你的回答是这样的,我用的vs写代码MonoDevelop来做调试.这时有同学就会反驳了傻X不知道用unityVS吗 ...

  8. 团队项目必备神器——自定义Lint

    Lint 在android studio中内置了大概200个左右的lint检查,比如定义变量未使用,直接Handler报内存泄漏提醒,时时刻刻在监督着我们的代码.自己定制了一些Lint规则,项目开源在 ...

  9. python开发必备神器 Virtualenv及管理工具Virtualenvwrapper

    如果在一台机器上,想开发多个不同的项目,需要用到同一个包的不同版本,如果还在本地继续安装,在同一个目录下安装或者更新,其它的项目必须就无法运行了,怎么办呢? 解决方案:虚拟环境 虚拟环境可以搭建独立的 ...

随机推荐

  1. BFC特性 形成BFC

    1.示例代码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <ti ...

  2. emplace_back() 和 push_back 的区别(转)

    在引入右值引用,转移构造函数,转移复制运算符之前,通常使用push_back()向容器中加入一个右值元素(临时对象)的时候,首先会调用构造函数构造这个临时对象,然后需要调用拷贝构造函数将这个临时对象放 ...

  3. BackBone.js之Router

    一.前言 有一段时间没有写随笔了,可能是最近的烦心事有点多.不倾诉了,开始我们的主题吧,以前做过一个web的聊天平台,js的代码足足有2k行. 虽然是在一个星期就完成了,但是想想还是不服.一定有一种更 ...

  4. 测试json字符和java对象属性不一样在多个json框架下转换的表现

    package com.longge.mytest; import java.io.IOException; import org.junit.Test; import com.alibaba.fas ...

  5. django之创建第12个项目-加载图片

    百度云盘:django之创建第12个项目-加载图片 1.setting配置 #静态文件相关配置 # URL prefix for static files. # Example: "http ...

  6. python之函数用法setdefault()

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法setdefault() #D.get(k,d) #说明:k在D中,则返回 D[K], ...

  7. mybatis generator(MyBatis的逆向工程)

    1创建数据表 如图所示:我的是在text数据库中创建了一个Student表,字段有id(int),   name(varchar),     age(int),    score(int) 2创建项目 ...

  8. mybatis-generator生成逆向工程两种方式

    本文博客地址:http://blog.csdn.net/soonfly/article/details/64499423 逆向工程下载 链接:https://pan.baidu.com/s/1YOAq ...

  9. VirtualBox虚拟机增加CentOS根目录容量 LVM扩容

    对于目前的网络开发者来说,比较好的搭档就是Win7+VirtualBox+CentOS的组合,既可以发挥Linux强大的网络服务功能,也可以有效的隔离各项服务拖慢系统,影响系统的运行,对于新手来说可以 ...

  10. fedora下安装运行keil uVision 4 (MDK v4.7)

    先准备好mdk4.73.exe和和谐文件. 1.安装 wine 1.7 添加ppa sudo add-apt-repository ppa:ubuntu-wine/ppa      安装wine 1. ...