Git 【git merge】
来源:互联网 发布:七层网络和四层模型 编辑:程序博客网 时间:2024/06/05 04:44
Merge 情景:
Ken 和 Vayne 两个 iOS 工程师共同开发一个项目,现有 Ken 和 Vayne 两个分支,Ken 为同事开发的分支并且已经提交到了远端。而 Vayne 是自己的本地分支。现需要合并 Ken 分支的完整代码到 Vayne 分支下。然后将 Vayne 分支下得最终版本提交到远端服务器上。
操作步骤:
(1)可能之前已经 merge 过很多次了,所以检查在你的电脑上是否有 Ken 的本地分支。如果存在旧的 Ken 分支,又因为远端的 Ken 分支已经是最新的了,所以为了避免不必要的冲突,我们可以先将本地旧的 Ken 分支进行删除。
git branch -D Ken
或者
git branch -d Ken
这里说一下 -d 和 -D 的区别,二者的区别就在于 -D 会强制删除本地仓库,一般用于 -d 删除不掉一些顽固文件时执行,此处我们直接强制删除就好了。
(2)基于 Vayne 分支新建一个 Ken 分支。(由于我们在合并的过程中可能会产生一些无法挽回的错误,所以说最好拿备份的分支与远端进行合并)
查看是否在当前 Vayne 本地分支下并基于 Vayne 进行创建 Ken 分支的操作:
git branch -a
git checkout -b Ken
这样我们得到的 Ken 本地分支就已经拿到了 Vayne 分支下所有最新的源码。
(3)拉下来远端的 Ken 分支并与本地的 Ken 分支进行合并。
git pull origin Ken
或者
git fetch origin Ken // 拉取远端git merge origin Ken // 合并远端
采用下面的两行代码更加的安全,因为可以在合并前对比两份代码。由于我们直接拉到本地的同名分支下,所以选择直接拉取并立即合并。
如果本地没有 Vayne 分支,但是又要拉取远端的 Vayne 分支或者 Ken 分支,那么可以:
git checkout -b Vayne origin/Vayne
git checkout -b Vayne origin/Ken
一般来说如果 Ken 分支下的就是最新的代码,那么可以直接删除本地的 Vayne 分支,然后再进行上面的命令行进行拉取就好了。(避免繁琐的 merge 的有效办法)
(4)冲突的处理
然后终端会显示冲突,如下图所示:
我们可以执行 git status 进行一个状态的打印(可以更明显的查看当前合并的情况)
git status
绿色部分的已解决冲突的后面紧跟着的是未解决的冲突,这些红色的冲突必须解决完毕之后才能正常的运行项目。
我们可以执行下面语句调出 File Merge 插件来帮助我们解决冲突:
git mergetool
可以发现该插件智能的提示出我们需要解决的冲突,并且提示我们一个一个的去解决。
有必要注意的是:.xib / .storyboard 文件修改起来十分的麻烦,如果这两类文件遭到了修改,最好的方式是将修改好的文件直接拖到项目所在的 Finder 下进行替换。这样不会将原 xib 与项目中的关联删除(比如说一些 IBOutlet 关联、IBAction 关联 和 关联的类)。再强调一次,直接在项目所在的 Finder 下进行替换,而不是删了原项目中的文件再拖到 Finder 里面,也不是直接拖到项目(Xcode)中。其中的区别大家要理解。
那么,如何使用 File Merge 呢?下图一目了然:
拿 .gitignore 文件来说明。蓝色部分表示有修改过的部分左右是会有对比的,我们可以选择每一部分应该采取左边还是右边,File Merge 已经为我们标注了有几部分发生了冲突,并且右下角也有如何选择的菜单。分别为:
Choose left 选择左边
Choose right 选择右边
Choose both (left first) 全选,左边在上,右边在下
Choose both (right first) 全选,左边在下,右边在上
Choose neither 全不选择
调整完毕后,下方的框内就是我们修改好的文件预览,再有需要调试的就在下方的预览框内修改即可。
修改完毕后保存、关闭。File Merge 会提示继续进行下一个冲突的修改。修改完一个会询问是否修改成功,此时输入 y,回车进入下一个冲突的修复。(上图中可以找到对应的命令行)
碰到 .xib / .storyboard 时直接打开接着关闭,然后输入 y,过掉然后需要我们手动去修改这些冲突。(上面已经说过拿到修改好的重新拖一次即可)
xib 如果修改不成功是打不开的,一般来说替换原来完整的 xib 是没有问题的,但是如果你不是采用的这种方式,那么会如下图所示打不开该 xib。(只能拿一个正常的过来替换,或是右键对应的 xib 文件,然后文本编辑模式修改代码)
如果文本修改代码,也不算困难,如下图:(下面是在 Xcode 中修改常规的代码文件,而修改 xib 的话就必须在文本编辑器中进行编辑)
我们可以尝试着来读一下上面的标注,这是我们在合并的时候产生的。共三句:
<<<<<<< HEAD
这里是自己部分的代码
=======
这里是合并过来的那部分代码
>>>>>>> 乱码
修改过后,把标注也删除了。就可以尝试打开或是运行程序,直到可以运行。
(5)收尾工作
所有工作做好之后,进行一个收尾的工作。检查一下运行后的程序各模块是否正确。
有些 xib 连线失效,要手动的设置一下。
冲突解决之后,系统会生成 .base .remote .backup .local 等冲突附件文件 和一些 .orig 文件,这些文件在冲突解决之后删除就好了。
(6)提交本地 Ken 分支的最新代码然后合并到自己的本地 Vayne 分支
注意,我们上述的种种操作都是在我们本地的 Ken 分支上操作的,Ken 分支解决完冲突之后我们将最新的代码提交保存到本地的 Ken 分支。
git add .git commit -m "这里写提交信息"
add . 是提交所有代码到本地分支(注意 add 后面的 . ),commit 是确认这次提交信息,-m 后面跟本次提交的具体描述。
然后再将 Ken 本地分支合并到我们自己本地的 Vayne 上。
git checkout Vaynegit merge Ken
先 checkout 切换到本地 Vayne 分支,然后将本地最新的 Ken 分支 merge 合并到本地 Vayne 分支上。由于我们本地的 Ken 分支是基于本地的 Vayne 分支建立的,所以一般来说到了这一步是不会出现冲突的。因为远端 Ken 分支 merge 到本地 Ken 分支时就已经解决完毕了。
(7)提交本地 Vayne 分支的最新代码并且上传到远端。
git add .git commit -m "提交本地合并后的 Vayne 分支"git push origin Vayne
这样远端 Vayne 分支下和我们本地的 Vayne 分支的代码保持一致了。
(8)如果远端仓库已经存在,那么可以先删除远端仓库,再添加新的远端链接即可。
git remote remove origin
git remote add origin 仓库URL
(仓库URL 用 SSH 或者 HTTPS 都可以)
- git merge
- git merge
- git merge
- git merge
- git merge
- Git Merge
- git merge
- git merge
- git merge
- git merge
- 【GIT】git merge简介
- Git 【git merge】
- git merge 和git rebase
- git rebase 与git merge
- git merge 和 git rebase
- git rebase和git merge
- git merge vs git rebase
- git rebase vs git merge
- Android-常用adb命令
- 批量下载图片,简易脚本
- Report标签嵌套在自定义form中引起的问题
- Tomcat启动解析web.xml源码分析
- 排序算法:选择排序
- Git 【git merge】
- vm安装linux出现的问题
- 多人开发版本控制时unity3d中NGUI图集混乱的解决办法
- n个学生站成一排 网易面试题之每个学生有一个能力值 牛牛想从n个学生中选出k名学生 要求相邻学生编号不超过d使得这k个学生乘积最大
- Codeforces Round #383 (Div. 1) C. Arpa’s overnight party and Mehrdad’s silent entering(贪心,二分图)
- Spring下mybatis多数据源配置
- 群聊协议发送的真正的(Message、IQ、presence)等 xmpp(二)
- PHP源码分析 - PHP-FPM定时事件
- linux命令大全——网络通信(二)