Git merge时遇到的坑
来源:互联网 发布:php彩票开奖源码 编辑:程序博客网 时间:2024/05/16 23:50
之前有了一次凌乱的git提交经历,虽然最后还是将代码成功合并了,但是最后还是踩了一个坑。
历史commit中被下掉的代码居然出现在了最终的commit中。。
猜想可能是下面的流程:
- 之前提交mr的时候把原本要下掉的代码提交到远程分支,
- 后来觉得代码有问题,本地reset到上个commit,然后把老代码下掉,增加新代码
- 再次提交时,由于两次修改的地方不一样,因此git判断没有冲突
- 最终提交后,git保留了两次修改的部分。。。
为了验证,我们可以做一个小实验:
新建一个git仓库
mkdir git-testcd git-testgit init
新增一个文件README.md,输入以下内容:
start
line
end
将此作为一个提交:
git add .git commit -m "git init"
初始化完成,我们先增加一行代码,将README.md修改为
start
add line #这是第一次修改的内容
lineend
提交
git add .git commit -m "version a"
这个过程相当于之前的老代码提交到远程分支的过程
之后我们checkout一个分支,当作我们的本地分支
git checkout -b local
此时我们要回退到上个版本,并将老代码下掉,增加新代码
git reset HEAD^ --hard
编辑README.md
start
line
add line 这是第二次修改的内容
end
提交
git add .git commit -m "version b"
这个时候回到master分支,merge一下local分支,相当于之前第二次提交代码到远程分支的过程
git checkout mastergit merge local
此时未提示冲突,直接合并。。。
最终README.md内容如下:
start
add line #这是第一次修改的内容
line
add line 这是第二次修改的内容
end
推测正确,这种情况git不会判断为冲突。
Git 在merge过程中判定冲突的方法如下:
当A分支要merge B分支时,Git会首先计算出两者最近的共同祖先C。
然后分别算出A与C的变更,以及B与C的变更。
在这两份变更中,如果更改了同一部分内容,且更改不相同,则会判定为有冲突。
否则,若改动的内容不是同一部分,或者改了同一部分内容但是更改后的内容也一样,则不会产生冲突。
为了避免以上我踩过的坑,记住一个原则。
已经merge到其它分支上的commit,不要再回退,直接在原commit上改动即可。否则你会产生各种诡异的现象。
- Git merge时遇到的坑
- git merge 时可能会遇到的问题
- git pull 遇到本地有修改,不能merge的问题
- Git pull 或 merge遇到的一些问题
- git merge的表现
- git: git操作遇到的坑 & 解决方法
- 使用git遇到的坑
- Git在合并时遇到unrelated history提示时无法merge
- git cherry-pick 时遇到 cannot merge binary files问题解决办法
- git merge的一些介绍
- git merge --squash的用法
- git的branch以及merge
- git merge引发的问题
- Git merge 不同的branch
- 'git merge' 和 'git rebase'的区别?
- git merge和git rebase的区别
- git merge和git rebase的区别
- 更好的理解git rebase git merge
- 开通博客 记录点点滴滴
- 浅谈UML学习笔记之构件图和部署图
- quartz实现定时任务
- Unity Shader 学习笔记(23) 运动模糊
- hashcode & equals
- Git merge时遇到的坑
- Spring+Struts2+Hibernate整合开发环境搭建
- vim常用设置
- 简单直接的爬虫,得到所需要的链接地址
- File类的综合应用
- 布局技巧
- 计算进程启动后时长
- git入门使用流程
- 一个月之后的我