`
shuminghuang
  • 浏览: 52398 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Git必知必会

    博客分类:
  • git
阅读更多

到了Palm之后开始接触Git,逐渐发现Git的便利之处。于是觉得很有必要掌握更多的Git技巧,而不能重演SVN的历史(只懂得基本的操作:checkout checkin update info)。

 

Git必知必会之:Git好在哪里

个人体验,Git最好的地方在亮点:

  • 离线管理(也就是通常说的“分布式”)
  • 分支

先说说离线管理。

Git能做到离线管理基于Git本地仓库是对“服务器”仓库的完全拷贝,本地拥有版本管理所需要的任何信息:变更历史、分支、标签等等。

有了离线管理,大部分的工作都不需要依赖网络了。虽然说现在的网速是越来越快,但网络的速度总是比不上本地的速度。(虽然版本历史多了之后,Git查看日志的速度也不算很快 :( )。

至于为什么Git要实现离线管理的功能,应该跟Git的背景有关:开发Linux的多数是些自愿者,他们崇尚开源、自由和免费,并且分布在世界各地,能依赖一个中央版本仓库来管理源代码并不方便。

分支

在SVN里,分支其实就是一个目录,比如通常的项目目录结构如下:

 

 

+trunk
+tags
+branches
   --production
   --emergency
   ...

在SVN的世界里,一个分支其实就是一个目录,production对应:http://server/project/branches/production; emergency对应http://server/project/branches/emergency。

而Git则完全不同,不同的分支是不同的时空,分支之间除了可以merge之外没有任何联系。比如http://server/porject.git

这个项目,本地的工作空间是/home/user/project/,在该目录内同时只能有一个branch的内容,即/home/user/project/readme.txt在另外一个branch的目录也是/home/user/project/readme.txt

 

Git必知必会之:基本Git命令

对一个版本控制系统来说,总少不了这样的命令:

  1. 添加文件进入版本控制系统
  2. 提交修改过的内容进入版本系统
  3. 将文件从版本系统中删除
  4. 查看某文件(或全部)的修改历史
  5. 比较两个文件的差异

下面分别介绍对应的Git命令。在这之前,需要在本地搭建一个git仓库:

 

git init

 输出:

Initialized empty Git repository in /home/gavin/project/git/blog/.git/

 

执行之后在该目录下多了个.git的隐藏目录,就算初始化成功了。这个目录里包含了git的全部信息,关于里面的文件结构以后可以继续研究。

 

添加文件进入版本控制系统

init之后,仓库还是空的,看不到任何log。(如果运行git log 将会出现这样的错误:fatal: bad default revision 'HEAD')。现在将文件readme.txt添加进工作区(工作区的概念在下一节)

git add readme.txt

 这样readme.txt就已经在工作区里了(但还未提交),即此文件以后就归git管理了。

提交文件修改

git commit -m "Jira-0001: first commit"

 

 也可以加另外一个参数:-a 表示直接提交所有文件(而不是只在工作区中的文件,从未add过的文件除外),这样就可以不执行git add命令了。

 

查看日志

git log readme.txt

 如果已经习惯SVN的日志输出格式,还可以加一些参数限制输出格式:

git log --pretty=format:'%h %an %cd %s' readme.txt

其中,

%h 表示此次提交的唯一标识;

%an 表示提交人 (author name)

%cd 表示提交日企 (commit date)

%s 表示提交时输入的消息 (即通过-m参数指定的字符串)

在linux下还有些图形化的日志工具:gitg 和gitk

git log的更多用法可以参见:http://gitref.org/inspect/#log

 

从仓库中删除指定文件

将文件添加进git可以用git add和git commit,那么从库中删除指定文件,即不再需要将某个文件纳入版本管理的命令是:

git rm --cached readme.txt
git commit -m "delete readme.txt" 

注意,如果不加--cached参数,则会将文件从磁盘删除。

 

放弃本地修改

偶尔会出现修改代码,却越改越乱的情况,这时候就想reset到原始状态。

git reset HEAD -- readme.txt

也可以通过checkout:

git checkout readme.txt

  checkout 和 reset的区别在于:reset是将当前“指针”指向到某处(默认为最新版本),而自某处之后的版本将被丢弃(通过低级命令可以找回); 而checkout只是将指定版本的内容签出到当前版本。

 

 

比较两个文件

git diff

将显示所有未“git add”的修改内容。而:

git diff --cached

将显示所有已经经过“git add”但未经过“git commit”的变动。

如果想比较同一个文件的不同历史版本可以:

 

git diff 6a5a54f:readme.txt 91d2ea9:readme.txt

 当然如果只是想比较两个版本的不同,不需要特别指定某个文件,则只需将版本后的“:readme.txt”去掉即可。

 

创建分支

前面提到过分支的强大,我通常为每个任务创建一个分支:

git branch jira-0001

这样就创建了一个名为jira-0001的分支,可以通过:

git checkout jira-0001

切换到该分支。想查看所有已经创建的分支:

git branch -l

 

合并分支

在分支上的工作上结束之后,需要将修改合并到主分支上,比如需要将jira-0001的工作合并到master中,则:

git merge jira-0001
 

如果一切顺利,则工作就算完成了,如果不走运(很遗憾,这经常发生),则会出现这样的错误:

CONFLICT (content): Merge conflict in readme.txt
Recorded preimage for 'readme.txt'
Automatic merge failed; fix conflicts and then commit the result.
 

则需要手动修改文件,提交后工作才算完成。git还为此提供了图形化界面,可以通过:

git mergetool

 

来进入图形化界面 (前提是在git 配置过mergetool)。

 

后续内容

经过一次草稿丢失(草稿隔了夜,早上新加的几段没保存)后,发现git有太多的内容需要介绍:

git log

git 配置

git remote、fetch、pull

 

这些内容不是一篇博文能承载的,留在后面补充吧。

分享到:
评论

相关推荐

    git必知命令

    git必知必会总结,该文档总结了git基本用法,可以应对大部分新手面临的困难

    liuwei1989#study-guide#311-Git必知必会1

    git clone --depth=1 # 只抓取最近的一次 commitgit log

    我的笔记叽叽叽叽叽叽叽

    这个PDF文档“git必知必会的内容”涵盖了Git的关键知识点,可能是按照以下结构编排的: 1. Git简介:解释Git的基本概念,如版本控制、工作流模型,以及Git相较于其他版本控制系统的优点。 2. 安装与配置:介绍在...

    git基本命令和操作的学习 | 必知必会内容

    Git是目前最流行的分布式版本控制系统,它允许开发者追踪和管理代码变更,非常适合团队协作开发。GitHub则是一个基于云服务的代码托管平台,提供了一个存放和分享代码的场所,同时也是开发者交流和协作的重要平台。 ...

    必知必会中文版2018

    这是一个网站,就是每个程序员自己写的程序,可以在github上建立一个网上的仓库,你每次使用git提交的时候可以把代码提交 到网上,这样你的每次提交,别人也都可以看到你的代码,同时别人也可以帮你修改你的代码,...

    必知必会3

    【标题】:“必知必会3”通常是指在IT领域中,那些对于专业人士或学习者来说至关重要的基础知识或技能集合。这些知识涵盖了编程语言、操作系统、网络技术、数据库管理、软件工程等多个方面,旨在帮助读者建立坚实的...

    500道Java后端面试必知必会-V1版.pdf

    《500道Java后端面试必知必会-V1版.pdf》这份文档的内容主要聚焦于Java后端开发领域的面试题目和知识点,其涵盖了面试者在求职过程中可能会遇到的Java相关问题。该文档适合准备Java后端开发面试的读者,帮助他们更好...

    第4章 前端面试技能拼图2 :前端基础知识 , 必知必会

    本章“第4章 前端面试技能拼图2:前端基础知识,必知必会”将深入探讨那些面试官常问且开发者必须掌握的核心概念。 1. HTML(超文本标记语言): HTML是网页内容的结构标准,是前端开发的基石。理解不同标签的作用...

    phper-linux-gitbook::light_bulb:PHPer必知必会Linux命令

    《PHPer必知必会Linux命令》是一部专为PHP开发者准备的Linux命令指南,旨在帮助PHPer们在Linux环境中更好地进行开发和运维工作。通过学习本资料,你可以掌握一系列常用的Linux命令,提升你的工作效率和系统管理能力...

    技术面试分享资源.ZIP

    4. **Java基础 - 必知必会(中/下)**: 这些章节可能包括了异常处理、多线程、IO流、反射等Java基础知识。面试中,你应能解释何时抛出异常,如何正确使用synchronized关键字,理解文件读写的基本操作,以及如何...

    程序员典藏书籍,学程序必备

    6. **数据库管理**:《MySQL必知必会》或《SQL基础教程》等书籍,帮助程序员理解和使用数据库,掌握数据存储和查询的重要技能。 7. **框架与库的应用**:对于特定领域的开发,比如Python的Django或Flask框架,...

    Notes-of-books-in-Xmind:一些读书笔记,思维导图

    算法&数据结构计算机网络操作系统Python基础Python基础教程python学习手册(第四版)Python进阶Python cookbookFluent Pythonpython核心编程(第三版)...MySQLMySQL必知必会深入浅出MySQLRedis实战Linux鸟哥的私房菜常用工具Git

    ITCASTBBS 传知播客BBS源代码

    【ITCASTBBS 传知播客BBS源代码】是一个专为IT爱好者和学习者设计的论坛系统,它的核心价值在于提供了开放的源代码,让开发者能够深入了解BBS(Bulletin Board System,电子公告板)的实现机制。通过研究这个源代码...

    技术面试需要掌握的基础知识整理1

    9. **SQL**:《SQL 必知必会》提供了关于SQL查询、联接、子查询、视图、存储过程等知识。 10. **MySQL**:《高性能MySQL》覆盖了MySQL的性能优化、复制、备份恢复等高级主题。 11. **Redis**:结合《Redis 设计与...

    CS_learning_record:CS相关知识

    《 MySQL必知必会》读书笔记 Redis学习 《全面MySQL》 LeetCode刷题笔记栈 Linux 《鸟叔Linux私房菜:基础篇》读书笔记 shell编程 ... 并发编程... 机器学习 一百天入门机器学习 机器学习实战 ... 深度学习 《深度...

    Web开发有用的技术书籍

    数据库管理也是重要技能,《MySQL必知必会》介绍了数据库的基础知识,而《高性能MySQL》则深入探讨优化技巧。对于分布式系统,理解CAP原理和设计模式至关重要,例如《分布式系统:概念与设计》和《大型网站技术架构...

    Windows10编译Mingw版本OpenCV3.4.5

    这个过程中可能会遇到各种问题,如依赖库的缺失、编译错误等,解决这些问题通常需要查阅文档、官方论坛或Stack Overflow上的相关帖子。 文件`cv345`可能包含了编译好的OpenCV库文件,包括动态库(`.dll`)、静态库...

    宿舍管理课程设计java

    5. 《MySQL必知必会》:熟悉数据库操作。 通过以上步骤,我们可以完成一个完整的宿舍管理系统,满足学校对宿舍管理的需求。在实际开发过程中,要注重代码的可读性、可维护性和安全性,同时不断学习新的技术和工具,...

    基于安卓的音乐APP源码数据库.zip

    10. **版本控制与协作**:项目的开发过程中,版本控制工具如Git必不可少,它可以帮助团队成员协同工作,追踪代码更改。 综上所述,基于安卓的音乐APP源码数据库是一个涵盖了移动应用开发、后端服务构建、数据库设计...

    MySchool第九章项目

    5. **版本控制**:项目可能使用Git进行版本控制,学员需要学会如何使用Git进行代码提交、分支管理、合并冲突等操作,这对于团队协作至关重要。 6. **测试与调试**:学员将学习单元测试、集成测试的方法,如JUnit或...

Global site tag (gtag.js) - Google Analytics