git rebase 和 git push:非快进,为什么使用?

2023-12-06

我有一个分支应该可供其他贡献者使用,并且应该不断与主版本保持同步。

不幸的是,每次我执行“git rebase”然后尝试推送时,都会导致“非快进”消息并中止推送。推到这里的唯一方法是使用 --force。这是否意味着如果我的分支公开并且其他人正在处理它,我应该使用“git merge”而不是变基?


关于 git 如何工作的一些注意事项(非技术性):

当您变基时,git 会获取有问题的提交,并在干净的历史记录之上“重新提交”它们。这是为了防止历史记录显示:

Description: tree -> mywork -> merge -> mywork -> merge -> mywork -> merge
Commit SHA1: aaaa -> bbbb   -> cccc  -> dddd   -> eeee  -> ffff   -> gggg

变基后,它可能看起来像这样(或类似):

Description: tree -> rebase
Commit SHA1: aaaa -> hhhh

问题是您尝试推出的新提交是不是后裔您要推送到的分支顶端的提交。

现在,您知道提交中包含相同的信息,但 git 负责的不仅仅是覆盖那些提交(上面示例中的 bbbb-gggg)。


共享回购模型

如果您使用共享存储库,那么类似的事情可能会变得非常混乱。让我解释一下原因。假设另一个开发人员拉下了分支,并且他们已经提交了啊啊-> gggg在他们的分支机构。然后他们做出承诺iiii

与此同时,您重新设置基础并强制推送,导致树看起来像这样:

Description: tree -> rebase
Commit SHA1: aaaa -> hhhh

当其他开发人员尝试推动时,他会收到“非快进”消息。当他进行合并时,两个历史都会重新链接在一起,最终会得到一个mess

像这样的东西(凌乱):

Description: tree -> rebase -> mywork -> merge -> mywork -> merge -> mywork -> merge -> devwork -> merge 
Commit SHA1: aaaa -> hhhh   -> bbbb   -> cccc  -> dddd   -> eeee  -> ffff   -> gggg -> iiii    -> jjjj

换句话说,如果其他人正在拉动和推动,那么您最好坚持使用 git merge,或者避免推动直到变基之后(并且仅变基您的工作)。


公开可见的存储库模型

也许您正在使用不同的(更愚蠢的)模型,您只是希望人们能够从您的存储库中提取数据。在这种情况下, git push --force 还不错,因为这样他们就可以跟上它。他们可以重新设定基础他们的改变在将补丁提供给您之前了解您的更改。它可以防止你的仓库变得混乱。

但是,可能有更好的方法适合您。git push --镜像

来自http://www.kernel.org/pub/software/scm/git/docs/git-push.html

不是命名每个要推送的引用,而是指定下面的所有引用 $GIT_DIR/refs/ (其中包括但是 不限于裁判/负责人/, refs/remotes/ 和 refs/tags/) 是 镜像到远程存储库。 新创建的本地参考将是 推送到远程端,本地 更新的参考文献将被强制更新 远程端,删除的引用将 从远端删除。这 如果配置为默认值 选项远程..镜像已设置。


其中最棒的事情之一git它非常灵活,允许许多不同类型的工作流程。但它真正的优势在于它是一个分布式模型,所以我相信通过这种方式使用它可以获得最大的投资回报率。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

git rebase 和 git push:非快进,为什么使用? 的相关文章

  • 每个分支的 Git 磁盘使用情况

    你知道是否有办法列出每个分支的 git 存储库的空间使用情况 喜欢df or du would 分支的 空间使用情况 是指 尚未在存储库的其他分支之间共享的提交所使用的空间 这没有正确的答案 如果您查看仅包含在特定分支中的提交 您将获得 b
  • GitHub - 指定时间的存储库状态

    我是使用 git 版本控制工具的初学者 我想在指定时间 例如 2013 年 10 月 5 日 下载存储库状态 文件 我怎样才能做到这一点 截至 2019 年 5 月 不确定何时引入 您可以简单地按以下格式添加日期 HEAD 2019 04
  • 警告:引用名称“xxx”不明确

    我想知道为什么我收到 refname is ambigeous 的警告 这是否意味着名称以该字符串开头的分支不超过两个 但这里没有 Thanks git checkout B03799 warning refname B03799 is a
  • 如何根据查找表匹配多列

    我有以下两个数据框 lookup lt data frame id c A B C price c 1 2 3 results lt data frame price 1 c 2 2 1 price 2 c 3 1 1 我现在想要浏览所有列
  • git 从存储中删除文件

    我有一个藏匿处 里面有一堆文件 但由于文件冲突 我无法应用我的存储 我已经在我的存储中发现了有问题的文件 我想将其删除 如何从存储中删除单个文件而不破坏整个文件 存储是一次提交 或者实际上是两次甚至有时是三次提交 并且您无法更改提交 那么
  • 如何将一个文件存储库上传到 Gist,并保留历史记录?

    我的计算机上有一个包含单个文件的 Git 存储库coins py 我如何才能将其作为 Github 上的要点来保存历史 这其实很简单 您可以将现有历史记录移动到 Gist 存储库中 就像将其移动到任何其他存储库中一样 创建要点 只需输入一些
  • 从预提交挂钩中排除某些文件类型

    我想要一个预提交 git 钩子来检查 如果可能的话 自动删除 尾随空格 In 让 git 在提交之前自动删除尾随空格 https stackoverflow com questions 591923 make git automatical
  • Git 分支之间未跟踪的文件

    我一直在这里寻找答案 看来我可能只是对 git 分支应该如何工作做出了错误的假设 我有我的master分支 我创建了一个名为的功能分支profiles我正在对个人资料进行一些特定的工作 在处理配置文件时 我更改了 5 或 6 个文件 并添加
  • git log --oneline 提供在管道或重定向到文件时丢失的 HEAD 信息

    当我执行没有管道或文件重定向的 git log oneline 命令时 它会提供有关 HEAD 位置和分支的信息 下面示例中的 master git log oneline color never 8bc8511 HEAD gt day 2
  • 如何 git checkout 提交并将子模块更新到该提交?

    我正在克隆一个带有子模块的项目并恢复到大约一年前的提交 git clone recursive branch 5 6 https codereview qt project org pyside pyside setup cd pyside
  • Git-svn:批量删除孤立的远程分支

    我正在处理的 SVN 项目 通过 git svn 有经常创建的分支 然后与主干重新集成 然后删除 现在项目大约有10个分支没有被删除 但是在git中 gitbranch r显示大约有50个 我可以一次删除这些 检查它们是否仍然存在于 svn
  • git reword 在变基期间显示合并冲突,但是 pick 工作正常

    我正在尝试用很少提交的另一个分支来重新建立一个分支 虽然提交包括合并提交 但我可以使用以下命令成功地对其进行变基git rebase i r m
  • 无法在 git 上获取 Http 工作

    我在拇指驱动器上使用 gitbash 作为 git 我的防火墙阻止了我 并且想设置我的 git 以进行 http 访问 我使用 github 并且已经看到了有关如何执行此操作的各种信息 但我还不够了解 无法让它为我自己工作 我在 php i
  • R - 通过合并和超过 2 个后缀进行减少(或者:如何合并多个数据帧并跟踪列)

    我正在尝试基于 2 列合并 4 个数据帧 但要跟踪列源自哪个数据帧 我在跟踪列时遇到问题 参见 dput dfs 帖子末尾 df example df1 Name Color Freq banana yellow 3 apple red 1
  • 如何更新我的裸存储库?

    我创建了一个裸存储库来发布我的存储库 但我不知道如何使用主存储库的当前状态更新裸存储库 如果您想复制主存储库中的所有对象 请在主存储库中执行此操作 git push all
  • 是否可以使用“最小”算法进行交互式添加?

    当从快照计算变更集时 Git 并不总是正确选择块边界 git diff has a diff algorithm允许在这方面进行一些调整的选项 git diff minimal有时会给出比git diff alone 有没有办法获得相同的优
  • 如何修复 Centos 上的 Git Segmentation 错误

    我收到分段错误错误 无法在服务器上提取代码 Centos 7 这就是我遇到错误的方法 通过使用以下命令来验证我的服务器是否使用 bitbucket 进行身份验证 ssh T email protected cdn cgi l email p
  • git 索引到底包含什么?

    Git 索引到底包含哪些内容 可以使用什么命令查看索引内容 感谢您的所有回答 我知道索引充当暂存区 提交的内容是在索引中而不是工作树中 我只是好奇索引对象由什么组成 我猜它可能是文件名 目录名 SHA 1 对的列表 也许是一种虚拟树 在 G
  • 配置 Eclipse/EGit 来跟踪上游存储库

    我正在使用 EGit 如新的 Eclipse 4 2 Juno 版本中提供的 我在 GitHub 上有一个存储库 是从另一个上游存储库分叉的 当我从 Github 上的存储库在 Eclipse 中创建项目时 它正确设置origin指向 Gi
  • Visual Studio 2017/2019/2022 gitsync/pull/push/fetch 操作卡住,并且无法停止

    我从 Visual Studio 中的 Git Changes 选项卡启动同步 获取 拉取或推送 但操作只是挂起 没有选项可以停止它 我必须点击 X 才能关闭 Visual Studio 如果操作是同步的 它会在其他所有操作上打开一个模式对

随机推荐

  • Android、Robotium - 截屏时出现问题

    我正在尝试使用 Robotium 截取我的 Android 应用程序的屏幕截图 我正在使用我发现的以下函数here public static String SCREEN SHOTS LOCATION sdcard public stati
  • 在 tumblr 中对类别使用不同的样式?

    我希望能够将带有不同标签 例如汽车 摩托车 船舶 的照片发布到 tumblr 然后 在帖子中 每个标签应显示不同颜色的水平线 例如汽车为蓝色 摩托车为红色 船舶为绿色 如果我将照片与其他标签 例如自行车或飞机 放在一起 它应该显示一条灰线
  • 列表如何使用 Apache poi 将映射值写入 Excel 文件

    我得到列表哈希映射键和值 例如 1 ACSS Description1 ACSS Description2 ACSS Description3 SACSS Description4 2 11 1 4 12 我想这样设置 Excel 单元格值
  • 查找用户的“我的文档”路径

    我有这个小程序 它需要在 我的文档 文件夹中创建一个小 txt 文件 这是我的代码 textfile open C Users MYNAME Documents w lines stuff goes here textfile writel
  • CLIPS 模式匹配中的数字相等测试失败?

    我的 CLIPS 文件中有以下规则 defrule check final declare salience 12 scnt lt set count value v class c test v total gt printout T t
  • BlackBerry 上的 HTTP Post 请求

    我正在尝试将 json 字符串从我的 BlackBerry OS String httpURL http ip of my server phpServer receiver2 php jsonString try HttpConnecti
  • 在 R 中按日期模糊匹配连接

    我有两个数据框 我想按日期将它们连接起来 df1 lt data frame day seq ymd 2020 01 01 ymd 2020 01 14 by 1 day key rep c green blue 7 value x sam
  • d3.js 按汇总字段排序

    我有一个 JSON 数据 我想按字段分组 然后按计数排序 var data Name Ravi Country India Name Alex Country USA Name Stew Country UK Name Mary Count
  • 时间:2019-03-27 标签:c#文件路径字符串比较大小写不敏感

    我想比较 C 中包含文件路径的两个字符串 但是 由于在 ntfs 中默认是使用不区分大小写的路径 因此我希望字符串比较以相同的方式不区分大小写 但是我似乎找不到任何有关 ntfs 如何实际实现其不区分大小写的信息 我想知道的是如何使用 nt
  • “u”和“r”字符串前缀到底有什么作用,什么是原始字符串文字?

    一边询问这个问题 我意识到我对原始字符串了解不多 对于自称是 Django 培训师的人来说 这很糟糕 我知道什么是编码 我也知道什么u 自从我了解了什么是 Unicode 以来 就只有这个了 但有什么作用r 究竟做什么 它会产生什么样的字符
  • 简单的 Twitter Oauth 授权每次都要求提供凭据

    我正在使用教程制作一个简单的基于 Twitter 的登录 注册系统here 每次让用户登录时 我都会获得 oauth token 以及 oauth 令牌秘密 但是 即使用户已经登录 系统也会要求他再次登录 我只是想知道如何检查用户是否已经登
  • 使用 JavaScript ES6 箭头函数的立即函数

    有谁知道如何使用 ES6 箭头语法编写立即函数 这是 ES3 5 的实现方式 function 我已经尝试过以下方法 但得到了unexpected token最后一行错误 gt 你可以在这里测试一下 http www es6fiddle n
  • 在 Swift 中对数组进行冒泡排序,交换时出现编译器错误

    我为纸牌游戏编写了一个非常简单的冒泡排序 它采用 Card 对象数组 每个对象都有一个 order 属性 该属性指示要针对相关游戏进行排序的值 以下代码在 Swift Beta 1 和 Beta 6 之间的某个时间停止编译 我不太清楚为什么
  • 如何测试仅调度其他操作的 Redux 操作创建者

    我在测试操作创建器时遇到问题 该操作创建器仅循环传递给它的数组并为该数组中的每个项目调度一个操作 这很简单 我只是似乎无法弄清楚 这是动作创建者 export const fetchAllItems topicIds gt return d
  • 使用 php excel reader 读取 xls 日期值

    我正在使用 PHPExcel 读取 Excel 文件中具有 Mar 13 等值的日期单元格 但它返回 41791 等整数值 请问 我需要做什么才能确保日期读取正确 Excel 将日期存储为序列化时间戳 自 1900 年 1 月 1 日以来的
  • 如何在 C 中打印二维数组而不使用运算符 []?

    我正在尝试使用打印二维矩阵 相反我想用 就像一个指针 所以对于一维数组我会这样做 arr i 例如 用于替换的语法是什么matrix 这是代码 for i 0 i lt size i for j 0 j lt size 2 j printf
  • 部分成功请求的 HTTP 状态代码

    我有一个向用户发送消息的应用程序 在 POST 请求中 传输一个 XML 字符串 其中包含应接收该特定消息的所有用户 如果列表中的任何用户不存在 我会将缺失用户的列表返回给客户以进行进一步评估 现在我问自己应用程序的正确状态代码是什么 表示
  • jquery获取图片宽度和高度

    我有一个非常简单的代码 令人烦恼的是 它正在工作 但在我的一生中 我不明白为什么它现在失败了 function imageSize img var theImage new Image theImage src img attr src v
  • 企业库 Unity 与其他 IoC 容器 [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 使用 Enterprise Library Unity 与其他 IoC 容器 Windsor Spring Net Autofac 相比有何优缺点 我正在为用户组准备演示文稿 因此 我刚刚
  • git rebase 和 git push:非快进,为什么使用?

    我有一个分支应该可供其他贡献者使用 并且应该不断与主版本保持同步 不幸的是 每次我执行 git rebase 然后尝试推送时 都会导致 非快进 消息并中止推送 推到这里的唯一方法是使用 force 这是否意味着如果我的分支公开并且其他人正在