Git在iOS中的简单使用

最近换了一家新公司,之前公司都是使用SVN来做版本管理的,一直都觉得挺好的,没什么问题,直到深入接触了Git,才发现Git是如此的方便和易用。这里呢记录一下,iOS开发者日常使用Git的一些知识。

Git常用命令

Git的命令有很多,但我们操作正确的话,只需要来来回回用那么几个命令,我是比较喜欢在终端中直接写命令的,其他同事呢喜欢用可视化工具,但我觉得,直接使用命令有助于我们理解Git的运作方式。
克隆代码到本地

git clone git@example.com:namespace/projectname.git 

修改代码后提交到服务器

git add .
git commit -m "修改的文字说明"
git pull
git push

如果在执行git pull时候有冲突呢,需要优先解决冲突,有冲突也不用怕,git会吧对应的冲突文件告诉你,你只需要打开对应的文件,然后解决冲突就可以了,在终端里面打开文件的命令是open 文件路径,修改后重新提交就好了。

多人协作的工作模式通常是这样:

  1. 首先,可以试图用 git push origin <branch-name> 推送自己的修改;
  2. 如果推送失败,则因为远程分支比你本地更新,需要先用 git pull 试图合并;
  3. 如果合并有冲突,则解决冲突,并在本地提交;
  4. 没有冲突或者解决掉冲突后,再用 git push origin <branch-name> 推送就能成功!

如果git pull提示no tracking information,则说明本地分支和远程分支的链接没有创建,用命令 git branch --set-upstream-to <branch-name> origin/<branch-name>

其他命令

该命令可以让我们时刻掌握仓库当前的状态,但是看不到具体的内容。

git status

查看日志

git log
// 只查看版本号和提交日志
git log --pretty=online

回退到上一个版本,如果要回退到指定版本,只需要将HEAD换成对应的版本号即可

git reset --hard HEAD^

把readme.rtf文件在工作区的修改全部撤销,其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

git checkout -- readme.rtf

删除文件

git rm test.rtf

第一次推送

git push -u origin master

之后的推送

git push origin master

本地git和远程建立连接

git branch --set-upstream-to=origin/master master

GitHub运用

分支管理

创建分支

git checkout -b dev

git checkout 命令加上-b参数表示创建并切换,相当于以下两条命令:

git branch dev
git checkout dev

查看分支

git branch

切换分支到master

git checkout master

合并分支到master

git merge dev

删除分支

git branch -d dev

通常,在合并分支的时候,Git会用 Fast forward 模式,但在这种模式下,删除分支后,会丢掉分支信息。

如果要强制禁用 Fast forward 模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

git merge --no-ff -m "merge with no-ff" dev
分支策略

在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master 分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那么在那干活呢?干活都在dev分支上,也就是说,dev分支是不稳定,到某个时候,比如1.0版本发布的时候,再把dev合并到master分支上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时的往dev分支上合并就可以了。
就像这样:

image
bug分支

每一个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。但是如果dev上的工作未完成还没有提交,现在要必须修复bug怎么办?</br>
Git提供了一个status功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作

git stash

在新建分支后,解决完bug,并且将bug分支删除,此时回到之前的工作分支,发现工作区是干净的,那之前保存的工作现场去哪了呢?使用 git stash list 命令可以查看到

git stash list

恢复有两个办法:

一是用 git stash apply 恢复,但是恢复后,stash内容并不删除,你需要用 git stash drop 来删除;

二是用 git stash pop,恢复的同时把stash内容也删除了;

git stash pop

如果要恢复指定的stash,可以先用 git stash list 命令查看,然后用命令恢复

git stash apply stash@{0}
feature分支

如果新建一个分支,但是并没有合并,现在需要删除,命令

git branch -D <name>

碰到的问题

  1. 在忽略文件中修改了,这个时候想要生效,需要清理缓存
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
  1. 如何去解决fatal: refusing to merge unrelated histories

因为他们是两个不同的项目,要把两个不同的项目合并,git需要添加一句代码,再git pull,
git pull origin master --allow-unrelated-histories

iOS的Gitignore

当我们在使用git作为版本管理的时候,需要在gitignore文件中添加需要的忽略文件,通常情况下自动生成的文件并不能满足我们的要求,而有的时候又需要我们根据不同的项目来定制,也可能会在项目进行到一半的时候修改忽略文件,这里根据实际开发统一一下规范。

注意:如果ignore文件已经在版本管理中,这个时候在修改ignore文件的时候通常不会生效,我们需要先清理缓存,然后重新添加提交,清理缓存的命令是git rm -rf --cached .

GitHub官方提供的各种语言的.gitignore

Objective-C

# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore

## macOS
.DS_Store
.AppleDouble
.LSOverride

## Build generated
build/
DerivedData/

## Various settings
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata/

## Other
*.moved-aside
*.xccheckout
*.xcscmblueprint

## Obj-C/Swift specific
*.hmap
*.ipa
*.dSYM.zip
*.dSYM

## CocoaPods
Pods/
Podfile.lock
!Podfile

Swift

# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore

## macOS
.DS_Store
.AppleDouble
.LSOverride

## Build generated
build/
DerivedData/

## Various settings
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata/

## Other
*.moved-aside
*.xccheckout
*.xcscmblueprint

## Obj-C/Swift specific
*.hmap
*.ipa
*.dSYM.zip
*.dSYM

## Playgrounds
timeline.xctimeline
playground.xcworkspace

# Swift Package Manager
#
# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
Packages/
Package.pins
Package.resolved
.build/

# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
Pods/
Podfile.lock
!Podfile
#
# Add this line if you want to avoid checking in source code from the Xcode workspace
*.xcworkspace

# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts

Carthage/Build

# fastlane
#
# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
# screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/#source-control

fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots/**/*.png
fastlane/test_output

# Code Injection
#
# After new code Injection tools there's a generated folder /iOSInjectionProject
# https://github.com/johnno1962/injectionforxcode

iOSInjectionProject/

参考文档

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

推荐阅读更多精彩内容

  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 12,645评论 4 54
  • Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来。这样一来,任何一处协同...
    __silhouette阅读 15,851评论 5 147
  • Git 命令行学习笔记 Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来...
    sunnyghx阅读 3,900评论 0 11
  • Git常用语法 [TOC] Git简介 描述 ​ Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,...
    君惜丶阅读 3,491评论 0 13
  • “妈,你说说怎么回事,怎么给我买一堆灰色的衣服。” “谁知道你俩小孩闹什么矛盾了,我还说小雨干嘛一直说要陪你去,还...
    傅攸宁阅读 221评论 0 0