(搬运自我在SegmentFault的博客)

本人是个Git新手,平时用Git最多的就是push,因为别的都不怎么会用。这几天因为在小组中负责代码的整合,顺便将代码提交到Github,接触到了Git更多的用法。

第一个问题比较简单,其实是关于Github的问题。就是我平时用Git的机器是自己的电脑,密钥也是存在本机上并把上传到Github上。那么我在机房的机器上难道要复制一份私钥过来?既不优雅也不安全。(网上还真有人这么干。)其实Github这类网站是可以保存多份公钥的,不信自己到Edit Profile->SSH Keys去看看。这是也明白为什么Git的Windows GUI版为什么不用设置密钥了。顺便记一下生成密钥的过程备忘。

cd ~/.ssh
ssh-keygen -t rsa -C "YOUR_EMAIL@YOUREMAIL.COM"

此时~/.ssh/id_rsa.pub就是你的公钥。

第二个问题稍微复杂一点,是关于在多台机器提交代码导致的问题。因为我会在我自己的电脑和机房电脑修改代码,难免造成代码的不一致。这时如果push代码可能会出错,原因可能是本地代码在版本树中的位置更早,或者多处独立提交了代码导致冲突。通常此时应当先将代码拉取下来解决冲突。

git fetch origin

执行完这一句后,我们会把执行git branch -r看到的远程分支都fetch下来。下面执行merge。

git merge origin/a-branch

这样会将远程repo中名叫a-branch的分支合并到本地的当前分支,默认就是master。关于分支的问题会在第三个问题再说。

如果merge之后自动解决了冲突最好,没有的话就略麻烦。Git会将所有有冲突的文件显示在终端里。如下图所示。

我们打开有冲突的文件,会看到类似下面这样的标识。

其中横线前的部分表示本地分支的内容,横线后则表示origin/master中的内容。

根据Git的提示,我们需要手动消除冲突。而不管我们改成什么样,Git并不关心,哪怕我们什么也不改也可以。注意此时我们用git status查看发现,冲突的文件被标记为了unmerged paths.

手动消除冲突后,我们就可以将这些文件加到暂存区。之后就可以随意commit和push了。

不过也有时候,Git会自动进行Fast Forward Merge

如果merge的结果不是我们想要的怎么办?

git reset --hard

那么,如果我们本地的分支是领先于远程分支,那么merge会怎么样?请看图。

至于merge和rebase的区别,stackoverflow上已经说的很好了。假设这是目前的状态:

      C---D---E local
/
A---B---F---G remote

merge之后是这样:

      C---D---E local
/ \
A---B---F---G---H remote

而rebase之后是这样:

              C'--D'--E' local
/
A---B---F---G remote

当然,他们的效果自然是一样的。

下面就是第三个问题了,关于Git中的分支。对于Git中的这一功能,之前一直没有去仔细研究,直到今天我们组就项目的某一实现产生了分歧,组长让我创建一个分支进行试验。假定我在本地创建出一个名叫test的分支:

git branch test

切换到test分支:

git checkout test

删除test分支:

git branch -d test

使用分支的一个好处自然就是代码可能在多个方向同时进行而不会相互干扰。当你切换到一个分支时,代码就会自动更换成对应分支的内容。而这一切都可以交给Git,而不需要自己手工备份代码。

问题驱动的Git学习的更多相关文章

  1. Git学习笔记---协作的一般流程

    一般的操作流程 1.pull 王小坤与另一个同事张大炮一起开发一个项目,张大炮昨天修改了数据库读写的api,优化了执行速度,并把read()函数改名成了Read(),下午下班之前把这些代码push到服 ...

  2. Git 学习看这篇就够了!

    Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. 可能新手会问"git和github有什么关系啊?" git是一个版本控制工具: githu ...

  3. Git学习笔记与IntelliJ IDEA整合

    Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:http://git-scm.com/downloads Git简要使用说明:h ...

  4. git学习之branch分支

    作为新手,站在我的角度肤浅的来理解,分支就是相当于开辟了一个新的临时工作区,在这个工作区进行文件代码改动,然后在合并到master主工作区,这样能保证主工作区的安全性和稳定性,对于团队协作尤为重要. ...

  5. git学习手册

    #git学习手册 git: Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理.[2] Git 是 Linus Torvalds 为了帮助管理 Linux内核开发而 ...

  6. Git学习笔记(10)——搭建Git服务器

    本文主要记录了Git服务器的搭建,以及一些其他的配置,和最后的小总结. Git远程仓库服务器 其实远程仓库和本地仓库没啥不同,远程仓库只是每天24小时开机为大家服务,所以叫做服务器.我们完全可以把自己 ...

  7. Git学习笔记(四)

    一.忽略特殊文件 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件. 不需要从头写.gitignore文件,GitHub已经为我们 ...

  8. git 学习笔记6--remote & log

    git 学习笔记6--remote & log 创建SSH Keys ssh-keygen -t rsa -C "1050244110@qq.com" 本地关联远程 git ...

  9. Git学习(4)基本操作

    1.版本提交 首先,接着上个Git学习(3)继续 我们先修改test.txt文本内容,增加一些信息进去,然后保存: Add a new data 第一步:运行命令 git status 命令查看文件是 ...

随机推荐

  1. js学习笔记2:循环和try/catch/throw

    今天学习了js的比较.if/else.switch/case和各种循环,这些东西每种语言都大同小异,没什么好看的,重点说一下js的循环. JavaScript 支持不同类型的循环: for - 循环代 ...

  2. Photoshop CC 智能切图功能介绍

    http://gdc.qq.com/ http://gdc.qq.com/?p=4445

  3. Spring Data JPA stackoverflow

    1.禁止使用lombok 的@Data 注释 使用@Data注释后,默认会重写父类的toString()方法,hashcode()等方法,在往map里存的时候,会根据equals和hashcode方法 ...

  4. URL辅助方法

    URL辅助方法则负责用来产生url地址,那什么时候需要呢,以输出超链接来说,使用Html.ActionLink()辅助方法一定会产生超链接的a标签,如果只是想单纯的输出asp.net mvc的某个网址 ...

  5. IDEA Maven Mybatis generator 自动生成代码(实例讲解)(转)

    IDEA Maven Mybatis generator 自动生成代码(实例讲解) MyBatis Generator • 简称MBG,是一个专门为MyBatis框架使用者定制的代码生成器,可以快速的 ...

  6. 洛谷P2687 [USACO4.3]逢低吸纳Buy Low, Buy Lower

    P2687 [USACO4.3]逢低吸纳Buy Low, Buy Lower 题目描述 “逢低吸纳”是炒股的一条成功秘诀.如果你想成为一个成功的投资者,就要遵守这条秘诀: "逢低吸纳,越低越 ...

  7. lca最近公共祖先(st表/倍增)

    大体思路 1.求出每个元素在树中的深度 2.用st表预处理的方法处理出f[i][j],f[i][j]表示元素i上方第2^j行对应的祖先是谁 3.将较深的点向上挪,直到两结点的深度相同 4.深度相同后, ...

  8. 黑马旅游网 url-pattern不加斜杠报错 java.util.concurrent.ExecutioException: org.apache.catalina.LifecycleException

  9. map练习小例题

    "fdgavcbsacdfs" 获取该字符串中,每一个字母出现的次数. 要求打印结果是:a(2)b(1)...; 思路: 对于结果的分析发现,字母和次数之间存在着映射关系.而且这种 ...

  10. C# File和fileinfo类

    两个类功能差不多,File是静态方法实现的,Fileinfo通过实例方法实现的: 文件操作例子: using System; using System.Collections.Generic; usi ...