git使用详解 terminal命令/sourceTree/Xcode

说到Git,必须要先谈一下版本控制。什么是版本控制?我为什么要关心它呢?版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。
版本控制的类型大致可以分为三大类:
本地版本控制系统

其中最流行的一种叫做 rcs,它的工作原理基本上就是保存并管理文件补丁(patch)。文件补丁是一种特定格式的文本文件,记录着对应文件修订前后的内容变化。所以,根据每次修订后的补丁,rcs可以通过不断打补丁,计算出各个版本的文件内容。

集中化版本控制系统
为了让在不同系统上的开发者协同工作,集中化的版本控制系统( Centralized Version Control Systems,简称 CVCS)应运而生。这类系统,诸如CVS,Subversion以及 Perforce等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。然而,事分两面,有好有坏。这么做最显而易见的缺点是中央服务器的单点故障。如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。要是中央服务器的磁盘发生故障,碰巧没做备份,或者备份不够及时,就会有丢失数据的风险。最坏的情况是彻底丢失整个项目的所有历史更改记录,而被客户端偶然提取出来的保存在本地的某些快照数据就成了恢复数据的希望。但这样的话依然是个问题,你不能保证所有的数据都已经有人事先完整提取出来过。本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。

分布式版本控制系统

分布式版本控制系统( Distributed Version Control System,简称 DVCS),在这类系统中,像 Git,Mercurial,Bazaar以及 Darcs等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。

版本控制的类别说完了,那么为什么要如此重视git呢?基于其分布式版本控制的优点和工作(创建和切换分支等)的高效性,git已经越来越流行,在国内的IT开发中也会慢慢取代SVN的。当然取代只是博主个人观点,so,上干活。

git 的命令行的使用

1、git的初始化首先在桌面上创建gitTest文件夹,然后创建ios项目并保存到gitTest文件夹下。当然,这里讲的是git的初始化,所以在创建工程的时候不要勾选创建git仓库选项,如下图:


由于mac系统是自带git的,所以git的命令在mac是直接可以使用的。
首先打开终端看一下本机的git版本:$ git version


对于一个没有进行版本控制的工程进行初始化(这里是对gitTest文件进行初始化)
(1)进入目录
(2)初始化仓库 $ git init
(3)添加文件到仓库的暂存区中 $ git add .(添加所有文件到暂存区)
(4) 提交 文件到仓库 $ git commit -m '注释' (-m 加注释的命令)
注意:3和4可以合成一个命令来完成 $git commit -a -m '注释'
接下来看终端的操作:


仓库初始化完之后,在文件夹下会生成一个.git的文件夹,里面存放的是git的配置文件和工程的快照。以点开头的文件在mac下是隐藏文件,可以用下面的命名显示mac的隐藏文件:$ defaults write com.apple.finder AppleShowAllFiles -bool true //显示文件夹 ,隐藏文件夹只要把true改为false

$ killall Finder //彻底关掉Finder
注意:os 10.10之前不用使用killall Finder,只要关掉Finder再重新打开就能看到效果,os 10.11需要killall Finder才能看到效果
截图如下:


至此已经把项目加入到了本地的仓库中,即git初始化完成。在对文件进行修改的过程中还会使用到一下git 命令:
$ git status //查看文件的状态
$ git diff //查看未加入暂存区的修改的文件内容
$ git diff --cached //查看已经加入暂存区的修改的文件内容
$ git log //查看提交的记录
$ git reset //撤销修改

2、git status实例如下图:
说明:凡是有改动但没有加入到暂存区的文件都显示在Changes not staged for commit:下;凡是加入到暂存区没有提交的文件都在Changes to be commit:下。
注意:提交的时候,git只会把暂存区中的文件提交到仓库中;所以提交的时候一定要看清楚文件的状态;


3、git diff 实例如下:
说明:由下图可以看出在文件中增加了look diff,然后用git diff 命令可以看出未加入暂存区的文件的修改;用git diff --cached查看加入暂存区的文件修改;当采用 git add . 把所有文件都加入到暂存区后使用 git diff是查看不到任何修改的。


4、git log实例如下:
说明:git log 会根据提交时间列出所有提交的记录;git log -2 会列出最近两次的提交记录;git log -p -2 会详细的列出最近2次修改的记录;下面的图为提交了两次后进行的操作



5、git reset (回退/撤销)
说明:
回退到之前的某个版本:(本地源码会改变)
git reset --hard HEAD^ //回退到上个版本
git reset --hard HEAD^^ //回退到上上个版本
git reset --hard HEAD~100 //回退到前100个版本
git reflog //查看版本信息
git reset --hard 版本号 //回退到指定版本

撤销本次commit (本地源码不会改变)
git reset --soft HEAD^
撤销add (本地源码不会改变)
git reset 或者git reset --mixed
回退工作区的修改 (本地源码会改变)
git checkout -- filename 撤销工作区的修改(即没有add之前修改)
回退到没有任何修改之前和服务器一样
git reset --hard origin/master //将本地版本回退到和远程服务器一样

6、git 分支
几乎每一种版本控制系统都以某种形式支持分支,而git的分支可以说是git的必杀技(速度快,操作简单)。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
命令如下:
<1>、创建新的分支 $ git branch 分支名
<2>、切换分支 $ git checkout 分支名
注意1和2可以合成一个命令来完成: $ git checkout -b 分支名
<3>、合并分支 (即把其他分支和当前分支合并在一起)
(1)切换到要合并到的分支 $ git checkout 分支名
(2) 进行合并 $ git merge 分支名
<4>、删除分支 $ git branch -d 分支名
<5>、查看所有分支 $ git branch

7、git添加标签
<1>创建标签 $ git tag -a 标签名 -m ‘注释’
<2> 切换标签 $ git checkout 标签名
<3> 删除标签 $ git tag -d 标签名
<4> 查看所有标签 $ git tag

8、远程仓库操作
至此,git本地的版本控制用到的命令基本上都有了。接下来来看一下git本地仓库和远程仓库的结合使用。这里使用https://bitbucket.org仓库托管网站。登录此网站后先注册用户,注册完用户后就可以获得免费的私人仓库,此仓库可以允许最多5个人一起共享开发。具体使用方法,这里就不多说了。开始上干货。
在bitbucket网站创建仓库gitTest,创建完成后如下图:


点击仓库进入后,会有提示如下图:

现在本地已经有了一个仓库,接下来采用上图中的第二种方法把本地仓库推送到bitbucket上



执行完以下git命令之后如上图,推送本地仓库到远程仓库成功
<1>、$ git remote add origin 远程仓库路径
<2>、$ git push -u origin --all 提交所有的文件
从现在开始,如果改变了本地代码并且要提交到远程服务器上就要进行以下三步:
<1> commit 提交本地代码
<2>$ git pull 拉取服务器上的最新代码
<3>$ git push 提交到远程服务器

接下来来看一下,本地没有仓库,需要从远程仓库上clone一份的情况
克隆的命令如下:

<1> git clone 远程仓库地址 --------------------直接克隆仓库到本地,并且本地文件夹的名字和远程仓库的名字一样
<2> git clone 远程仓库地址 本地文件夹名字 --------------------直接克隆仓库到本地,并且本地文件夹的名字和远程仓库的名字不一样

从已有仓库中获取干净的代码
//获取干净的代码
git archive --format zip --output /Users/Nick/Desktop/git/output.zip master -0

Xcode git版本控制
Xcode 中的操作如下图所示:



sourceTree 进行代码的控制
sourceTree是git仓库的客户端,可以在appSotre中或去官方网站下载。
1、添加新的仓库



添加成功后如下图所示:

2、打开后并进行修改代码后的图如下:

关于bitbucket和sourceTree的具体用法,请自行搜索学习。

注明:转载自 Nick的专栏 http://blog.csdn.net/xiaonaiping061/article/details/49685675

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容