一、问题

在使用 Git 的进行代码版本控制的时候,往往会发现在 log 中出现 “Merge branch ‘master’ of …” 这句话,如下图所示。日志中记录的一般为开发过程中对代码的改动信息,如果出现过多例如上述描述的信息会造成日志的污染。

二、产生的原因

当多人合作开发一个项目时,本地仓库落后于远程仓库是一个非常正常的事情,可参考下图

具体情境如下:

我当前拉取的远端版本为 B,此时修改了代码,并在本地仓库 commit 一次,但并未 push 到远端仓库。
另一位开发者在 B 的基础上,同样 commit 了一次并 push 到远端仓库。那么这个时候,我再 push 自己的代码就会发生错误

To github.com:xxx/xxx.git
! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'git@github.com:xxx/xxx.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.

这个时候我们会选择,先 pull(如果有冲突需要先解决冲突,再 push。push 成功,但是此时我们查看 log 就会发现除了我们自己提交的那条日志之外,会多出一条 “Merge branch ‘master’ of …”。

那么,为什么会出现这种现象呢?其实是与 Git 的工作原理有关,对 Git 比较了解的人应该会知道,无论是 pull、push 亦或是 merge 操作,其实背后都是有很多的不同的模式的。

在进行 pull 操作的同时,其实就是 fetch+merge 的一个过程。我们从 remote 分支中拉取新的更新,然后再合并到本地分支中去。

如果 remote 分支超前于本地分支,并且本地分支没有任何 commit 的,直接从 remote 进行 pull 操作,默认会采用 fast-forward 模式,这种模式下,并不会产生合并节点,也就是说不会产生多余的那条 log 信息

如果想之前那样,本地先 commit 后再去 pull,那么此时,remote 分支和本地会分支会出现分叉,这个时候使用 pull 操作拉取更新时,就会进行分支合并,产生合并节点和 log 信息。这两种状态分别如下图所示:

三、解决方法

  • 方法一: 在执行git pull的时候加上–rebase参数。这参数的意思就是在合并代码之前,先执行变基操作,成功后在进行真正的merge操作。(如果有冲突需要手动解决)
  • 方法二:在你的git bash里执行git config --global pull.rebase true。这个配置就是告诉git在每次pull前先进行rebase操作。这种方法和方法1原理一样,只不过方法1是每次pull前都要手动操作。

四、git base 原理

以下图为例子:


现在我们本地库分支比远程库分支要超前3个提交。我们看到上图中git log是一条有分支线,如果我们直接push,整个代码是不会有任何问题的,但是会不好看!那么rebase操作就是修正这个log线,使得整个log变成一条直线。 现在我们已经把超前远程库3个commit了,这时候我们执行一下【git rebase】命令后,我们再把log打出来是下面这个样子的:

原本分叉的提交现在变成一条直线了。这样在log中的merge也没有了,清爽了许多!!!rebase的原理非常简单。观察上图,发现git把我们本地的提交挪动了位置,放到了f005ed4 (origin/master) set exit=1之后,这样,整个提交历史就成了一条直线。rebase操作前后,最终的提交内容是一致的,但是,我们本地的commit修改内容已经变化了,它们的修改不再基于d1be385 init hello,而是基于f005ed4 (origin/master) set exit=1,但最后的提交7e61ed4内容是一致的。

该方法的优点:把分支的提交历史“整理”成一条直线,看上去更直观
该方法的缺点:本地的分叉提交已经被修改过了

git pull时产生'Merge branch 'master' of...问题相关推荐

  1. Git提交时出现Merge branch ‘master‘ of ...之解决方法

    多人协作开发项目,在上传代码时通常会先pull一下远程代码,使本地与远程同步更新,但是如果远程此时与自己代码存在冲突,在解决冲突后提交有时会出现"Merge branch 'master' ...

  2. 2021-07-12Git - git pull时遇到error: cannot lock ref ‘refs/remotes/origin/master‘: unable to resolve...

    git pull时遇到问题及解决方法 问题描述: 解决方法及原因分析: 1.git log 错误: 解决方法:修复 .git/refs/heads/分支名 原因分析:IDE的错误关闭 2.git pu ...

  3. 本地没有任何修改,只是git pull时,显示git ahead of ‘origin/master‘ by * commits

    目录 TL;DR 问题 原因 解决方案 TL;DR 本地没有更改,只是从远程pull,但是显示Your branch is ahead of 'origin/master' by 3 commits. ...

  4. git pull时解决分支分叉(branch diverged)问题

    git pull时解决分支分叉(branch diverged)问题 参考文章: (1)git pull时解决分支分叉(branch diverged)问题 (2)https://www.cnblog ...

  5. 解决git pull时出现的几个问题

    第1个问题: 解决GIT代码仓库不同步 今天在执行git pull时出现: 解决方法: 执行git checkout -f,然后再执行git pull重新checkout 再执行git pull时就可 ...

  6. git点击pull后没有同步_关于git pull时出现的问题及解决反思

    前因 在前面由于已经git过一次,按照娄老师的要求,代码一个一个commit,所以删掉之前的git仓库(用la查看,使用rm -rf .git删除).但远程origin已经存在,所以执行git rem ...

  7. Git使用:在Git pull时遇到的Error及解决方法

    1. Error: fatal: The remote end hung up unexpectedly error: RPC failed; curl 18 transfer closed with ...

  8. git pull时提示错误:warning: ignoring broken ref refs/remotes/origin/HEAD的解决办法

    git pull时提示错误:warning: ignoring broken ref refs/remotes/origin/HEAD的解决办法 我用的是IDEA开发的GIT项目,首先找到你项目的根目 ...

  9. 执行git pull时出现:fatal: Authentication failed for ‘http://......................‘

    执行git pull时出现:fatal: Authentication failed for 'http://-' 解决方案1 git config --system --unset credenti ...

最新文章

  1. mysql datetime转换为date_MySQL date,datetime,timestamp区别及相互转换
  2. 编写程序,输入某年某月,求该月有多少天
  3. 用户报告性能缓慢的解决流程
  4. ScrollView分栏视图分析
  5. BZOJ-1008 越狱
  6. linux fedora35指定某个固定的启动项作为默认的启动项
  7. WCF系列(五) -- 也谈序列化(下)
  8. 看下completablefuture(暂时没看完)
  9. *【CodeForces - 859C 】Pie Rules (博弈dp,时光倒流)
  10. opencv2.4.3通过不同方式访问图像像素
  11. mysql中date与datetime类型的区别
  12. CXF webservice完整例子
  13. c语言对n个数选择排序_选择排序_C语言「抄作业」
  14. 参考文献在论文中进行引用标注
  15. Postman 中文包使用
  16. C++编译错误与运行时错误
  17. not enough arguments in call to oprot.Flush
  18. 关节空间阻抗控制器设计的个人理解
  19. Amazon Web Services: Networking AWS:网络 Lynda课程中文字幕
  20. 物联网卡不能上网是怎么回事?

热门文章

  1. 借助Packet Capture实现无Root抓请求
  2. 扫一扫——Zxing
  3. 2022最新面试题JavaScript、Vue
  4. 改变Keil5所有窗口的背景颜色
  5. 通信笔记——数字基带传输系统
  6. Intervals on the Ring(多校6 I题)
  7. 网络设备及网络常用概念(交换机,路由器,ip等)基础知识
  8. 计算机应用基础西南大学答案2015,计算机应用基础统考练习题答案
  9. 如何计算近似纳什均衡_《纳什均衡与博弈论》读书笔记
  10. 如何利用免费网站采集程序打造一个高权重的站