问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求问git 上 pull 或者 merge 的时候出现的提示是什么意思

发布网友 发布时间:2022-05-07 20:12

我来回答

3个回答

热心网友 时间:2022-04-18 18:29

在解决gitmerge的冲突时,有时我总忍不住吐槽git实在太不智能了,明明仅仅是往代码里面插入几行,没想到合并就失败了,只能手工去一个个确认。真不知道git的合并冲突是怎么判定的。在一次解决了涉及几十个文件的合并冲突后(整整花了我一个晚上和一个早上的时间!),我终于下定决心,去看一下gitmerge代码里面冲突判定的具体实现。正所谓冤有头债有主,至少下次遇到同样的问题时就可以知道自己栽在谁的手里了。于是就有了这样一篇文章,讲讲gitmerge内部的冲突判定机制。recursivethree-waymerge和ancestorgit的源码先用merge作关键字搜索,看看涉及的相关代码。找了一段时间,找到了gitmerge的时候,比较待合并文件的函数入口:ll_merge。另外还有一份文档,它也指出ll_merge正是合并实现的入口。从函数签名可以看到,mmfile_t应该就代表了待合并的文件。有趣的是,这里待合并的文件并不是两份,而是三份。intll_merge(mmbuffer_t*result_buf,constchar*path,mmfile_t*ancestor,constchar*ancestor_label,mmfile_t*ours,constchar*our_label,mmfile_t*theirs,constchar*their_label,conststructll_merge_options*opts)看过githelpmerge的读者应该知道,ours表示当前分支,theirs表示待合并分支。看得出来,这个函数就是把某个文件在不同分支上的版本合并在一起。那么ancestor又是位于哪个分支呢?倒过来从调用方开始阅读代码,可以看出大体的流程是这样的,gitmerge会找出三个commit,然后对每个待合并的文件调用ll_merge,生成最终的合并结果。按注释的说法,ancestor是后面两个commit(ours和theirs)的公共祖先(ancestor)。另外前面提到的文档也说明,git合并的时候使用的是recursivethree-waymerge。关于recursivethree-waymerge,wikipedia上有个相关的介绍#Recursive_three-way_merge)。就是在合并的时候,将ours,theirs和ancestor三个版本的文件进行比较,获取ours和ancestor的diff,以及theirs和ancestor的diff,这样做能够发现两个不同的分支到底做了哪些改动。毕竟后面git需要判定冲突的内容,如果没有原初版本的信息,只是简单地比较两个文件,是做不到的。鉴于我的目标是发掘git判定冲突的机制,所以没有去看git里面查找ancestor的实现。不过只需肉眼在图形化界面里瞅上一眼,就可以找到ancestorcommit。(比如在gitlab的network界面中,回溯两个分支的commit线,一直到岔路口)有一点需要注意的是,revert一个commit不会改变它的ancestor。所谓的revert,只是在当前commit的上面添加了新的undocommit,并没有改变“岔路口”的位置。不要想当然地认为,revert之后ancestor就变成上一个commit的ancestor了。尤其是在revertmergecommit的时候,总是容易忘掉这个事实。假如你revert了一个mergecommit,在重新merge的时候,git所参照的ancestor将不是merge之前的ancestor,而是revert之后的ancestor。于是就掉到坑里去了。建议所有读者都看一下git官方对于revertmergecommit潜在后果的说法:mit的公共祖先,比较同一个文件分别在ours和theirs下对于公共祖先的差异,然后合并这两组差异。如果双方同时修改了一处地方且修改内容不同,就判定为合并冲突,依次输出双方修改的内容。

热心网友 时间:2022-04-18 19:47

版本不一致,服务器上header指针所指向的文件版本和本次提交更改有冲突。或者本次合并请求与服务器上文件有冲突,需要手动更改。
可以使用差异化合并工具,解决冲突。

热心网友 时间:2022-04-18 21:22

譬如 remote 有 commit 1,2,4
你 local 有 commit 1,2,3
这时你 pull 下来,就会跳到编辑器,需要填写本次自动 merge 的 commit ,最后到 commit 5
不过,我还是习惯 fetch remote 后手动 merge
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
在农村建平房一层多少钱 彩色长毛兔彩色长毛兔在我国 律师和律师事务所什么关系 律师事务所里面都是律师吗 每个律师都隶属于一个律师事务所吗,那律师事务所是怎么运作的? vivox5全网通可不可以同时用联通卡和移动 X5能插两张手机卡吗?联通移动都可以使用吗? 老公身体不好跟我没性生活有什么方法可以满足我性生活 多普达HTCP3600自身带的语音指令软件叫什么名字?那里有下载,谢谢了_百 ... 求多普达P3600I在香港的价格 求多普达P3600I现在的价格 Git push,merge,pull,fetch,rebase各自在什么场景下使用 git merge是不是只会合并修改,不会合并提交? 怎么去上海古镇 ? 上海南汇桃花节 桃花节期间,不去新场桃园,单去新场古镇要不要门票? 南汇看桃花的话,新场好还是大团好 上海火车站到新场坐地铁需要多少钱,怎么买票? 沪南线公交车浦建路杜鹃路到新场票价多少 从真北路1902弄至新场古镇怎么去 从江杨北路到新场古镇怎么乘车? 复旦大学到新场镇地铁多少钱? 黑色T恤配什么颜色的裤子和什么样式的? 黑色T恤搭配什么颜色裤子 与三种裤子配显时尚 英国利兹大学留学花费大不大 利兹大学生活费每年需要花多少钱 利兹大学一年费用需要多少 想去英国留学,请问一年的花费大概是多少? 利兹大学一年花费多少 英国利兹大学研究生留学需要多少钱 英国留学:利兹大学费用多少 40 git 已经merge的怎么修改 git拉取远程分支的两种方法有什么区别 git merge代码后还要提交吗 如果一个人老是晚上睡觉做春梦的,是不是说明他的心里不健康呢? 为什么每天晚上睡觉都做春梦 晚上老是做春梦,做完梦以后睡不着? 用电脑怎样看新闻联播: 请问用电脑看直播新闻cctv1?有什么软件或者输入其它的? 在电脑上没法看新闻视频? 鸱枭的读音是什么 电脑上怎样收看新闻联播? 鸱枭拼音是什么 鸱鸮怎么读音是什么 请问这下边的字都念什么,请把拼音写上,十分感谢,很着急呢 鸱枭鸣衡轭拼音 恶之如鸱枭,恶的读音 一个鸟下面一个木,这个字念什么? 《诗经·豳风·鸱号》拼音 矢 这个什么字啊?拼音谢谢了,大神帮忙啊 斩伐 的 拼音 是