首页 > 其他分享 >Git合并时一些鲜为人知的坑

Git合并时一些鲜为人知的坑

时间:2023-11-30 10:32:51浏览次数:34  
标签:pull Git merge 合并 鲜为人知 git 本地 fetch

1.  反复解决同一个冲突

最常见的原因:

  多人团队中开启了rebase ,对commit顺序造成破坏,使得merge 其他分支时可能找不到原始commit id的关联信息,就需要重新merge  conflicts.

 

 

2. 明明合并完了,又让从头合并

当然这和用rebase有关的, 关键是已经解决了冲突,为啥还让从头再来一次。问题出在了git pull上。

就像Mark Twain Blaise Pascal笑话里说的那样:我没有时间让它更短些。

最常说的关于git使用的一个经验就是:

不要用git pull,用git fetch和git merge代替它。

git pull 不完全等于 git fetch + git merge

fetch同pull的区别在于:
git fetch:是从远程获取最新版本到本地,不会自动merge.
而git pull是从远程获取最新版本并merge到本地仓库.
从安全角度出发,git fetch比git pull更安全,因为我们可以先比较本地与远程的区别后,选择性的合并。

Git合并时一些鲜为人知的坑_本地文件

请看上图, pull不等于fetch+merge这么简单。 pull拉取远程文件直接和本地文件对比,从共同祖先提交开始回放remote的提交,而git merge是本地repo和本地文件的对比合并,这里得用到了repo的索引,这样已经Merge的文件会复用repo中已经解决冲突的信息,这样就不会有从头开始合并了。

git pull的问题是它把过程的细节都隐藏了起来,以至于你不用去了解git中各种类型分支的区别和使用方法。当然,多数时候这是没问题的,但一旦代码有问题,你很难找到出错的地方。看起来git pull的用法会使你吃惊,简单看一下git的使用文档应该就能说服你。

将下载(fetch)和合并(merge)放到一个命令里的另外一个弊端是,你的本地工作目录在未经确认的情况下就会被远程分支更新。当然,除非你关闭所有的安全选项,否则git pull在你本地工作目录还不至于造成不可挽回的损失,但很多时候我们宁愿做的慢一些,也不愿意返工重来。

下面是Git工作流程图。

Git合并时一些鲜为人知的坑_本地文件_02

Git合并时一些鲜为人知的坑_git_03

作者:sunsky303

标签:pull,Git,merge,合并,鲜为人知,git,本地,fetch
From: https://blog.51cto.com/u_15715098/8625682

相关文章

  • git改变仓库地址
    在管理项目的时候,可能会遇到改变项目仓库地址的情况为了尽可能的模拟实际开发情况以github和gitee作为远程仓库前提:同时为github和gitee配置公钥,并访问正常为什么要进行地址替换,而不是直接下载新的项目,当改变项目仓库的时候,其实代码的没有太多的变动,新项目所要的相关配置,才是......
  • 同时为github和gitee配置公钥
    同时为github和gitee配置公钥1.下载githttps://git-scm.com/download/win2.配置公钥参考https://help.gitee.com/base/account/SSH公钥设置通过命令ssh-keygen生成SSHKey:ssh-keygen-ted25519-C"mobiwusihuan288@163.com"输入秘钥文件名,其他回车id_rsa_githubid......
  • git
    gitstatusgitstatus-s--ignored//以简洁模式查看暂存区和工作区的文件(全部显示,不执行文件过滤)gitstatus-uno//查看暂存区和工作区的非untrack(未跟踪)状态文件gitstatus-uall//查看暂存区和工作区的状态文件(递归子目录显示出里面的文件)查看log显示log同时显示......
  • 使用C#将几个Excel文件合并去重分类
    需要将几个Excel表格里面的数据去重,然后将每个站点的数据另存为一张Sheet上。几个表格如下所示: 实现效果如下所示: 具体实现需要使用EPPlus操作Excel安装EPPlus如下所示: 为了更好的演示与说明,把步骤进行了拆分,先导入Excel数据,再去重,再进行数据分类,最后再导出为Excel......
  • Gitee - 基于 Git 的代码托管和研发协作平台本地代码同步教程
    什么是Gitee?一、Gitee的发展史。Gitee(码云)是开源中国于2013年推出的基于Git的代码托管平台、企业级研发效能平台,提供中国本土化的代码托管服务。二、个人对Gitee的理解Gitee跟Git有什么区别,个人认为一个是国内、一个是国外,但是两个的目的都是一样的,都是为了方便彼此更好的代......
  • 极狐GitLab—新一代源代码管理仓库
    产品概述    极狐GitLab是一款具有软件开发全生命周期的DevOps能力的新一代源代码管理仓库,无缝集成代码托管、敏捷管理、CI/CD,从需求管理到应用上线能够形成数据的完整串联。极狐GitLab具有高可用可扩展的架构特点,可提供万人规模的架构行业实践参考和专业服务支持;提供专业......
  • 解决git status报错问题,以及git init初始化不成功问题
    VbenAdmin安装依赖时husky安装失败请查看你的源码是否从github直接下载的,直接下载是没有.git文件夹的,而husky需要依赖git才能安装。此时需使用gitinit初始化项目,再尝试重新安装即可。 在你要做的项目的文件夹中,空白区域右击鼠标,属性-安全-完全控制权限给允许......
  • FastGit 和 nvm 配合使用
    背景研究一个前端项目(itcase<苍穹外卖>)的时,发现node版本执行npminstall出现依赖下载失败等等问题解决办法1.启动FastGit2.安装nvm(node版本管理工具)##https://blog.csdn.net/muguli2008/article/details/107730766nvmlistavailable#百度下nvminstall12.2......
  • 快速解决Error: error:0308010C:digital envelope routines::unsupported的三种解决方
    问题描述:    报错:Error:error:0308010C:digitalenveloperoutines::unsupported报错原因:     因为node.jsV17版本中最近发布的OpenSSL3.0,而OpenSSL3.0对允许算法和密钥大小增加了严格的限制报错详细信息:解决方案: 方案1:打开IDEA终端,直接输入Linux&......
  • C#删除.git文件夹
    C#在通常情况下删除文件只需要调用下面的方法即可:Directory.Delete(dir.FullName,true);上面的代码会删除指定的文件夹及文件夹下面所有的子文件夹和文件。但是用上面的代码去删除.git文件夹的目录时,貌似会失败,报异常。具体的失败原因不是特别清楚,也没有去仔细钻研。可能的......