问题驱动的Git学习
(搬运自我在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学习的更多相关文章
- Git学习笔记---协作的一般流程
一般的操作流程 1.pull 王小坤与另一个同事张大炮一起开发一个项目,张大炮昨天修改了数据库读写的api,优化了执行速度,并把read()函数改名成了Read(),下午下班之前把这些代码push到服 ...
- Git 学习看这篇就够了!
Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. 可能新手会问"git和github有什么关系啊?" git是一个版本控制工具: githu ...
- Git学习笔记与IntelliJ IDEA整合
Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:http://git-scm.com/downloads Git简要使用说明:h ...
- git学习之branch分支
作为新手,站在我的角度肤浅的来理解,分支就是相当于开辟了一个新的临时工作区,在这个工作区进行文件代码改动,然后在合并到master主工作区,这样能保证主工作区的安全性和稳定性,对于团队协作尤为重要. ...
- git学习手册
#git学习手册 git: Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理.[2] Git 是 Linus Torvalds 为了帮助管理 Linux内核开发而 ...
- Git学习笔记(10)——搭建Git服务器
本文主要记录了Git服务器的搭建,以及一些其他的配置,和最后的小总结. Git远程仓库服务器 其实远程仓库和本地仓库没啥不同,远程仓库只是每天24小时开机为大家服务,所以叫做服务器.我们完全可以把自己 ...
- Git学习笔记(四)
一.忽略特殊文件 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件. 不需要从头写.gitignore文件,GitHub已经为我们 ...
- git 学习笔记6--remote & log
git 学习笔记6--remote & log 创建SSH Keys ssh-keygen -t rsa -C "1050244110@qq.com" 本地关联远程 git ...
- Git学习(4)基本操作
1.版本提交 首先,接着上个Git学习(3)继续 我们先修改test.txt文本内容,增加一些信息进去,然后保存: Add a new data 第一步:运行命令 git status 命令查看文件是 ...
随机推荐
- 2013-2014回首&展望
2013年,可以说是此前18年中,最重要最感触的一年了. 和老婆相爱,考高考,入大学等等事情全都在这美妙的一年里发生了. 2013: 开心:·和老婆相爱,共同经历了大大小小的风雨·每天都有期待的东西· ...
- linux下c语言利用iconv函数实现utf-8转unicode
iconv是linux下的编码转换的工具,它提供命令行的使用和函数接口支持 man手册iconv命令用法如下: iconv -f encoding -t encoding inputfile 有如下选 ...
- SQL Server中的聚集索引(clustered index) 和 非聚集索引 (non-clustered index)
本文转载自 http://blog.csdn.net/ak913/article/details/8026743 面试时经常问到的问题: 1. 什么是聚合索引(clustered index) / ...
- pure css做的手机页面
<!doctype html> <html> <head> <meta http-equiv="Content-type" content ...
- 模板 - 动态规划 - 区间dp
因为昨天在Codeforces上设计的区间dp错了(错过了上紫的机会),觉得很难受.看看学长好像也有学,就不用看别的神犇的了. 区间dp处理环的时候可以把序列延长一倍. 下面是 $O(n^3)$ 的朴 ...
- unity_pojie
http://www.ceeger.com/forum/read.php?tid=23396&desc=1
- python爬虫——web前端基础(4)
CSS,指层叠样式表,用来定义如何显示HTML元素,一般和HTML配合使用. 在HTML中使用CSS样式的方法: 内联样式表:CSS代码直接写在现有的HTML标记中,直接使用style属性改变样式.例 ...
- 【T-BABY 夜谈大数据】基于内容的推荐算法
这个系列主要也是自己最近在研究大数据方向,所以边研究.开发也边整理相关的资料.网上的资料经常是碎片式的,如果要完整的看完可能需要同时看好几篇文章,所以我希望有兴趣的人能够更轻松和快速地学习相关的知识. ...
- docker安装及概述
相关快捷键 退出:Ctrl-D or exit detach:Ctrl-P + Ctrl-Q Docker 核心技术 1.Namespace — 实现Container的进程.网络.消息.文件系统和主 ...
- hdu5726-GCD-ST表+二分
先用st表处理出所有l-r的GCD值,然后二分求得这些值一共出现了多少次. #include<bits/stdc++.h> #define inf 0x3f3f3f3f ; using n ...