iOS Git分支操作

一、本地分支

  • 1、创建分支
    git branch name
eg:
$ git branch testing
  • 2、切换分支
    git checkout name
eg:
$ git checkout testing


  • 3、新建分支处理问题
    比如现在有一个需要处理的issue,并且命名为issue20,这个时候我们创建一个分支并且修复他可以这样子
git checkout -b issue20

这里我们加上了-b这个参数,起代表的意思是:
创建一个分支,并且选择他

$ git branch issue20
$ git checkout issue20



假设我们已经把issue20修复完成了,这个时候我们要把分支修改后的内容合并到master分上面去

  • 4、合并分支
    • 1、回到你要合并的分支
    • 2、使用merge指令
$ git checkout '输入要回到的分支名称'
$ git merge '要合并的分支名称'

eg:
$ git checkout master
$ git merge testing

请注意,合并时出现了“Fast forward”的提示。由于当前 master 分支所在的提交对象是要并入的 testing 分支的直接上游,Git 只需把 master 分支指针直接右移。换句话说,如果顺着一个分支走下去可以到达另一个分支的话,那么 Git 在合并两者时,只会简单地把指针右移,因为这种单线的历史分支不存在任何需要解决的分歧,所以这种合并过程可以称为快进(Fast forward)。



合并完成之后,对于我们修复bug的那个分支已经不需要存在了,就可以把起删除掉


  • 5、删除分支
    git branch -d name
eg:
$ git branch -d testing

但是在项目中合并可能不会那么容易,如果遇到的合并分支的冲突

$ git merge issue20
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.



如何查看冲突文件?

  • 6、查看冲突文件
$ git status

任何包含未解决冲突的文件都会以未合并(unmerged)的状态列出。Git 会在有冲突的文件里加入标准的冲突解决标记,可以通过它们来手工定位并解决这些冲突。可以看到此文件包含类似下面这样的部分:

<<<<<<< HEAD
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
  please contact us at support@github.com
</div>
>>>>>>> issue20

可以看到=======隔开的上半部分,是 HEAD(即 master 分支,在运行 merge 命令时所切换到的分支)中的内容,下半部分是在 issue20 分支中的内容。解决冲突的办法无非是二者选其一或者由你亲自整合到一起。比如你可以通过把这段内容替换为下面这样来解决:

<div id="footer">
please contact us at email.support@github.com
</div>

这个解决方案各采纳了两个分支中的一部分内容,而且我还删除了 <<<<<<<,======= 和 >>>>>>> 这些行。在解决了所有文件里的所有冲突后,运行 git add 将把它们标记为已解决状态
(译注:实际上就是来一次快照保存到暂存区域。)。因为一旦暂存,就表示冲突已经解决。如果你想用一个有图形界面的工具来解决这些问题,不妨运行 git mergetool,它会调用一个可视化的合并工具并引导你解决所有冲突:

$ git mergetool

This message is displayed because 'merge.tool' is not configured.
See 'git mergetool --tool-help' or 'git help config' for more details.
'git mergetool' will now attempt to use one of the following tools:
opendiff kdiff3 tkdiff xxdiff meld tortoisemerge gvimdiff diffuse diffmerge ecmerge p4merge araxis bc3 codecompare vimdiff emerge
Merging:
index.html

Normal merge conflict for 'index.html':
  {local}: modified file
  {remote}: modified file
Hit return to start merge resolution tool (opendiff):

如果不想用默认的合并工具(Git 为我默认选择了 opendiff,因为我在 Mac 上运行了该命令),你可以在上方"merge tool candidates"里找到可用的合并工具列表,输入你想用的工具名。我们将在第七章讨论怎样改变环境中的默认值。

退出合并工具以后,Git 会询问你合并是否成功。如果回答是,它会为你把相关文件暂存起来,以表明状态为已解决。

再运行一次 git status 来确认所有冲突都已解决:

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   index.html

如果觉得满意了,并且确认所有冲突都已解决,也就是进入了暂存区,就可以用git commit来完成这次合并提交。提交的记录差不多是这样:

Merge branch 'issue20'

Conflicts:
  index.html
#
# It looks like you may be committing a merge.
# If this is not correct, please remove the file
#       .git/MERGE_HEAD
# and try again.
#

如果想给将来看这次合并的人一些方便,可以修改该信息,提供更多合并细节。
比如你都作了哪些改动,以及这么做的原因。有时候裁决冲突的理由并不直接或明显,有必要略加注解。


  • 7、查看分支列表
$ git branch

branch

其中绿色前面带*号的表示当前选中的分支


  • 8、查看分支列表以及分支信息
$ git branch -v
branch info


  • 9、查看那些分支还未/已合并

已合并,通常我们为了处理某个问题而开的分支,在合并之后就可以删除了

eg:
$ git branch --merged

未合并,如果删除未合并的分支会报错,因为那样子会数据丢失,但是如果你执意删除可以使用-D来进行删除

eg:
$ git branch --no-merged


二、远程分支

当我们需要协同开发的时候,我们通常会一个发布通道,一个测试通道以及一个正在开发的通道。

发布通道中我们会把测试ok的代码合并到里面去,然后我们新编写的功能开发完成就会加入测试分支。

类似于下面这样子,作者自己画的,有点丑……见谅

Git分支管理.png


  • 1、新建远程分支
    可以分为两步,第一步新创建本地分支,第二步把本地分支push到服务器上去
eg:
$ git branch haha

eg:
$ git push origin haha


  • 2、下拉指定分支
git checkout --track origin/testbranch

如果你从服务器上面下拉分支的时候出现了
fatal: 'origin/testbranch' is not a commit and a branch 'testbranch' cannot be created from it
这种错误,那么就可以使用

重点:

git fetch origin 来同步远程服务器上的数据到本地

然后在下拉一次

$ git checkout --track origin/testbranch

Branch testbranch set up to track remote branch testbranch from origin.
Switched to a new branch 'testbranch'

看到Switched to a new branch 'xxx'这样子的字样就说明成功了


  • 3、提交数据到指定分支
    git push origin 分支名称

git push origin haha
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 260 bytes | 260.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
...


  • 4、删除指定分支
    git push origin :分支名称
 git push origin :haha
remote: Powered by Gitee.com
To gitee.com:codepgq/EIQ-Smart.git
 - [deleted]         haha




三、合并分支的指定文件

假设现在有两个分支:jack、smith,
然后在jack中新建了两个文件(a.c 和 b.c)
这个时候想把b.c合并到smith中

  • 首先在jack 这里如果你没提交有可能会丢失数据
git add . 
git commit -m "xxxxx"
  • 然后就要切换分支
git checkout simith
  • 再把要合并的文件,导入到当前的分支中
    git checkout 分支名 文件路径
git checkout jack b.c
这里需要注意,因为b.c就在根文件,所以不需要路径只需要文件名,
但是如果你的文件在子文件夹内,就需要把文件路径也导入进来


更新:2018年11月06日

如何切换Git的源(当个人项目转移到公司账号下或者修改了项目名称)

码云
git remote set-url origin [git@gitee.com](mailto:git@gitee.com):地址.git


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

推荐阅读更多精彩内容

  • Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来。这样一来,任何一处协同...
    __silhouette阅读 15,887评论 5 147
  • Git 命令行学习笔记 Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来...
    sunnyghx阅读 3,921评论 0 11
  • 星期四,就要去长沙。 今天一整天希希儿都在告诉我,大家没有忘记我,大家都欢迎我,让我不要有心理压力。 我放了心,却...
    羥羊阅读 297评论 0 1
  • 四月不减肥,五月会怎样?
    娜年时光阅读 228评论 0 0