git - Git n commit 后面 | n 前面
问题描述
我正在使用 gitlab 并且有一个项目,其中一个人已经推送了她的工作并将其与 master 合并,我创建了一个新分支并将其推送到远程并发出合并请求,但问题是它说我的分支是 3在 2 前面提交,所以它不能被合并。(我试图合并的项目实际上与 master 中的项目相同。)我不知道如何解决这个问题。我的分支不应该从 master 上的 HEAD 开始而不是落后吗?我是 git 新手,所以如果我很愚蠢,我很抱歉。
解决方案
我认为处理这个问题的最好方法是使用rebase。Git Merge 和 Git Rebase 具有相同的目的。它们旨在将来自多个分支的更改集成为一个。尽管最终目标是相同的,但这两种方法以不同的方式实现它。
Git 合并
合并是使用版本控制系统的开发人员的常见做法。无论是为了测试、错误修复还是其他原因创建分支,合并提交更改到另一个位置。更具体地说,合并获取源分支的内容并将它们与目标分支集成。在这个过程中,只改变了目标分支。源分支历史保持不变。优点
- 简单而熟悉
- 保留完整的历史和时间顺序
- 维护分支的上下文
缺点
- 提交历史可能会被大量合并提交污染
- 使用 git bisect 进行调试可能会变得更加困难
Git 变基
Rebase 是将更改从一个分支集成到另一个分支的另一种方法。Rebase 将所有更改压缩到一个“补丁”中。然后它将补丁集成到目标分支上。
与合并不同,变基使历史变平,因为它将完成的工作从一个分支转移到另一个分支。在此过程中,不需要的历史记录被消除。
优点
- 简化可能复杂的历史
- 操作单个提交很容易(例如恢复它们)
- 在繁忙的分支中避免合并提交“噪音”
缺点
- 团队合作时,重新定位公共存储库可能很危险
- 更多的工作:使用 rebase 来保持你的特性分支总是更新
- 使用远程分支变基需要您强制推送。
使用以下命令将功能分支重新定位到主分支。
$ git checkout feature
$ git rebase master
这会将整个功能分支移动到主分支之上。它通过为原始(功能)分支中的每个提交创建全新的提交来重写项目历史记录。
推荐阅读
- batch-file - 为什么这段代码不显示我设置的 5 个随机标题?
- redux - getStaticProps 在 prod 和 dev 处返回空对象(下一个 v9.5.1)
- python - 如何刷新/重新启动画布以在 Tkinter 中创建不同的绘图?
- php - Laravel 不允许序列化“闭包”
- ios - SSL pinning 与 AFNetworking 崩溃问题
- python - 如何在 Heroku 中运行 Docker 容器
- pytorch - DDPG 中的保单损失
- ios - 无法使用 xib 将背景视图添加到弹出视图下
- xml - 使用 groovy 脚本或 xslt 合并两个 xml
- c# - 检查时间戳在 C# 中是否存在 X 秒?