花了两天时间专门搞了一下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. 关于gitblit在Windows中无法Start的问题

    前期配置/data/defaults.properties文件,请自行百度 首先:找到该目录下的该文件 右键打开,找到SET ARCH=xx,将xx替换成x86 将该处的默认修改成配置环境变量的jvm ...

  2. 关于IOS某图片添加控件,图片从相册或拍照保存后,再次进入时点击放大图无法显示的问题

    某图片添加控件: https://github.com/XZTLLQ/LQPhotoPickerDemo 问题: 标题已说明 代码块: NSArray *alAssetUrl =(NSMutableA ...

  3. JNI 引用问题梳理(转)

    局部引用: JNI 函数内部创建的 jobject 对象及其子类( jclass . jstring . jarray 等) 对象都是局部引用,它们在 JNI 函数返回后无效: 一般情况下,我们应该依 ...

  4. Ajax学习(二):模仿jQuery的Ajax封装工具

    通过上一节的学习,基本了解Ajax的使用, 但是这样使用很麻烦,这里封装ajax为一个方法,作为一个ajax工具,传入相应参数就可以实现ajax的使用. 模仿jQuery的Ajax. 如下是jQuer ...

  5. Jenkins+Ant+Jmeter搭建持续集成的接口测试平台(转)

    一.什么是接口测试? 接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点.测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻 ...

  6. I2C 12864OLED的工作机制

    有许多不同规格的OLED显示屏与Arduino兼容, 128x64是最常见的型号, 也很便宜, 淘宝上大概是12~14元一片. OLED与Arduino的通信 首先, 使用I2C总线的设备, 都可以使 ...

  7. 总结一下关于mysql 5.6 新特性

    一直断断续续的看一些mysql特性,今天总结一下,以下是列表,网址 http://mariadb.org/ (也是类似的特性), http://mysql.com/ 最近在看关于mysql新特性的一些 ...

  8. Dockerfile 构建前端nginx应用并用shell脚本实现jenkins自动构建

    Dockerfile 文件构建docker镜像 FROM centos MAINTAINER zh********h.cn RUN rm -f /etc/nginx/nginx.conf COPY n ...

  9. 可扩展的Web系统和分布式系统(Scalable Web Architecture and Distributed Systems)

    Open source software has become a fundamental building block for some of the biggest websites. And a ...

  10. CSRF攻击与防御(写得非常好)

    转自:http://blog.csdn.net/stpeace/article/details/53512283 CSRF概念:CSRF跨站点请求伪造(Cross—Site Request Forge ...