到了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命令
对一个版本控制系统来说,总少不了这样的命令:
- 添加文件进入版本控制系统
- 提交修改过的内容进入版本系统
- 将文件从版本系统中删除
- 查看某文件(或全部)的修改历史
- 比较两个文件的差异
下面分别介绍对应的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 clone --depth=1 # 只抓取最近的一次 commitgit log
这个PDF文档“git必知必会的内容”涵盖了Git的关键知识点,可能是按照以下结构编排的: 1. Git简介:解释Git的基本概念,如版本控制、工作流模型,以及Git相较于其他版本控制系统的优点。 2. 安装与配置:介绍在...
Git是目前最流行的分布式版本控制系统,它允许开发者追踪和管理代码变更,非常适合团队协作开发。GitHub则是一个基于云服务的代码托管平台,提供了一个存放和分享代码的场所,同时也是开发者交流和协作的重要平台。 ...
这是一个网站,就是每个程序员自己写的程序,可以在github上建立一个网上的仓库,你每次使用git提交的时候可以把代码提交 到网上,这样你的每次提交,别人也都可以看到你的代码,同时别人也可以帮你修改你的代码,...
【标题】:“必知必会3”通常是指在IT领域中,那些对于专业人士或学习者来说至关重要的基础知识或技能集合。这些知识涵盖了编程语言、操作系统、网络技术、数据库管理、软件工程等多个方面,旨在帮助读者建立坚实的...
《500道Java后端面试必知必会-V1版.pdf》这份文档的内容主要聚焦于Java后端开发领域的面试题目和知识点,其涵盖了面试者在求职过程中可能会遇到的Java相关问题。该文档适合准备Java后端开发面试的读者,帮助他们更好...
本章“第4章 前端面试技能拼图2:前端基础知识,必知必会”将深入探讨那些面试官常问且开发者必须掌握的核心概念。 1. HTML(超文本标记语言): HTML是网页内容的结构标准,是前端开发的基石。理解不同标签的作用...
《PHPer必知必会Linux命令》是一部专为PHP开发者准备的Linux命令指南,旨在帮助PHPer们在Linux环境中更好地进行开发和运维工作。通过学习本资料,你可以掌握一系列常用的Linux命令,提升你的工作效率和系统管理能力...
4. **Java基础 - 必知必会(中/下)**: 这些章节可能包括了异常处理、多线程、IO流、反射等Java基础知识。面试中,你应能解释何时抛出异常,如何正确使用synchronized关键字,理解文件读写的基本操作,以及如何...
6. **数据库管理**:《MySQL必知必会》或《SQL基础教程》等书籍,帮助程序员理解和使用数据库,掌握数据存储和查询的重要技能。 7. **框架与库的应用**:对于特定领域的开发,比如Python的Django或Flask框架,...
算法&数据结构计算机网络操作系统Python基础Python基础教程python学习手册(第四版)Python进阶Python cookbookFluent Pythonpython核心编程(第三版)...MySQLMySQL必知必会深入浅出MySQLRedis实战Linux鸟哥的私房菜常用工具Git
【ITCASTBBS 传知播客BBS源代码】是一个专为IT爱好者和学习者设计的论坛系统,它的核心价值在于提供了开放的源代码,让开发者能够深入了解BBS(Bulletin Board System,电子公告板)的实现机制。通过研究这个源代码...
9. **SQL**:《SQL 必知必会》提供了关于SQL查询、联接、子查询、视图、存储过程等知识。 10. **MySQL**:《高性能MySQL》覆盖了MySQL的性能优化、复制、备份恢复等高级主题。 11. **Redis**:结合《Redis 设计与...
《 MySQL必知必会》读书笔记 Redis学习 《全面MySQL》 LeetCode刷题笔记栈 Linux 《鸟叔Linux私房菜:基础篇》读书笔记 shell编程 ... 并发编程... 机器学习 一百天入门机器学习 机器学习实战 ... 深度学习 《深度...
数据库管理也是重要技能,《MySQL必知必会》介绍了数据库的基础知识,而《高性能MySQL》则深入探讨优化技巧。对于分布式系统,理解CAP原理和设计模式至关重要,例如《分布式系统:概念与设计》和《大型网站技术架构...
这个过程中可能会遇到各种问题,如依赖库的缺失、编译错误等,解决这些问题通常需要查阅文档、官方论坛或Stack Overflow上的相关帖子。 文件`cv345`可能包含了编译好的OpenCV库文件,包括动态库(`.dll`)、静态库...
5. 《MySQL必知必会》:熟悉数据库操作。 通过以上步骤,我们可以完成一个完整的宿舍管理系统,满足学校对宿舍管理的需求。在实际开发过程中,要注重代码的可读性、可维护性和安全性,同时不断学习新的技术和工具,...
10. **版本控制与协作**:项目的开发过程中,版本控制工具如Git必不可少,它可以帮助团队成员协同工作,追踪代码更改。 综上所述,基于安卓的音乐APP源码数据库是一个涵盖了移动应用开发、后端服务构建、数据库设计...
5. **版本控制**:项目可能使用Git进行版本控制,学员需要学会如何使用Git进行代码提交、分支管理、合并冲突等操作,这对于团队协作至关重要。 6. **测试与调试**:学员将学习单元测试、集成测试的方法,如JUnit或...