好的,我以为这是一个简单的git场景,我缺少什么?

我有一个master分支和一个feature分支。 我在master上做一些工作,在feature上做一些,然后再在master上做更多的工作。 我最终得到这样的东西(字典顺序暗示着提交的顺序):

A--B--C------F--G  (master)\    D--E  (feature)

我可以使用git push origin master来保持远程master更新,也没有问题,可以使用git push origin feature (在feature )来为我的feature工作维护远程备份。 到目前为止,我们还不错。

但现在我要重订feature在上面F--G上主提交,所以我git checkout featuregit rebase master 。 还好。 现在我们有:

A--B--C------F--G  (master)\D'--E'  (feature)

问题:当我要备份以git push origin feature feature分支的新的基于重载的feature ,由于树由于重新定基而发生了更改,因此该推送被拒绝了。 这只能通过git push --force origin feature解决。

我讨厌使用--force不确定自己是否需要它。 所以,我需要吗? 请问垫底一定意味着未来push应该是--force FUL?

此功能分支未与任何其他开发人员共享,因此对于强制推送我实际上没有问题,我也不会丢失任何数据,这个问题更具概念性。


#1楼

在这个分支上可能只有一种开发人员,也可能不是这种情况,即现在(在重新设置基准之后)不与原点/功能内联。

因此,我建议使用以下顺序:

git rebase master
git checkout -b feature_branch_2
git push origin feature_branch_2

是的,新分支,这应该在没有--force的情况下解决此问题,我认为这通常是git的主要缺点。


#2楼

以下对我有用:

git push -f origin branch_name

并且不会删除我的任何代码。

但是,如果要避免这种情况,可以执行以下操作:

git checkout master
git pull --rebase
git checkout -b new_branch_name

那么您就可以将所有提交樱桃挑选到新分支。 git cherry-pick COMMIT ID ,然后推送您的新分支。


#3楼

由于OP确实了解了问题,因此只寻找更好的解决方案...

作为实践呢?

  • 拥有实际的功能开发分支(您永远无需重新设置基础和强制推送,因此您的同行功能开发人员不会讨厌您)。 在这里,请定期合并合并中的更改。 梅西耶(Messier)的历史 ,是的,但是生活很轻松,没有人对他的工作有所了解。

  • 拥有第二个功能开发分支,其中一个功能团队成员定期将所有功能提交推送到,实际上是基于基础的,甚至是强制执行的。 因此,几乎完全是基于最近的主提交。 功能完成后,将该分支推入master顶部。

该方法可能已经有一个模式名称。


#4楼

我会改用“ checkout -b”,它更容易理解。

git checkout myFeature
git rebase master
git push origin --delete myFeature
git push origin myFeature

删除时,您可以防止推送包含不同SHA ID的现有分支。 在这种情况下,我仅删除远程分支。


#5楼

开发人员应该使用-f或--force而不是-f

--force-with-lease

为什么? 因为它检查远程分支的更改,这绝对是个好主意。 假设James和Lisa正在同一个功能分支上,而Lisa已推送了一次提交。 詹姆斯现在将其本地分支机构重新设基,并在尝试推送时被拒绝。 当然,詹姆斯认为这是由于改组并使用--force造成的,并将重写Lisa的所有更改。 如果詹姆斯使用了“租用强制”,他将收到警告,提示其他人进行了提交。 我看不出为什么有人在重新定级后进行推送时会使用--force而不是--force-with-lease。


#6楼

我避免强行推入的方法是创建一个新分支,并继续对该新分支进行工作,并在保持一定稳定性之后,删除重新建立基础的旧分支:

  • 在本地重新建立已签出的分支
  • 从重新建立基础的分支到新分支
  • 将该分支作为新分支推送到远程。 并删除远程上的旧分支

#7楼

对我来说,遵循简单的步骤即可:

1. git checkout myFeature
2. git rebase master
3. git push --force-with-lease
4. git branch -f master HEAD
5. git checkout master
6. git pull

完成上述所有操作后,我们还可以通过以下命令删除myFeature分支:

git push origin --delete myFeature

#8楼

feature分支上的git merge master feature什么问题? 这将保留您所做的工作,同时将其与主线分支分开。

A--B--C------F--G\         \D--E------H

编辑:抱歉没有阅读您的问题说明。 在执行重新设置rebase将需要用力。 所有修改历史记录的命令都需要--force参数。 这是一种故障保险,可以防止您丢失工作(旧的DE会丢失)。

因此,您执行了一个git rebase ,使树看起来像(尽管由于DE不在命名分支中而部分隐藏了):

A--B--C------F--G\         \D--E      D'--E'

因此,当尝试推送新feature分支(其中包含D'E' )时,您将丢失DE


#9楼

问题是git push假定远程分支可以快速转发到本地分支,也就是说,本地分支和远程分支之间的所有区别都在于本地末尾有一些新的提交,如下所示:

Z--X--R         <- origin/some-branch (can be fast-forwarded to Y commit)\        T--Y    <- some-branch

当您执行git rebase提交D和E应用于新的基础,并创建新的提交。 这意味着在重新设置基准之后,您将得到以下内容:

A--B--C------F--G--D'--E'   <- feature-branch\  D--E                <- origin/feature-branch

在这种情况下,远程分支无法快速转发到本地。 虽然,理论上可以将本地分支合并到远程(显然,在这种情况下您不需要它),但是由于git push仅执行快进合并,因此会引发错误。

--force选项的作用只是忽略远程分支的状态,并将其设置为您要推送到其中的提交。 因此git push --force origin feature-branch只是使用local feature-branch覆盖了origin/feature-branch feature-branch

在我看来,只要您是该分支上唯一的成员,就可以在master上对功能分支重新建立基础,然后将其强制推回到远程存储库中。


#10楼

一种解决方法是做msysGit的一下重订合并脚本执行-变基后,在老头合并feature-s ours 。 您最终得到了提交图:

A--B--C------F--G (master)\         \\         D'--E' (feature)\           /\       --\    /D--E (old-feature)

...,您对feature将很快。

换句话说,您可以执行以下操作:

git checkout feature
git branch old-feature
git rebase master
git merge -s ours old-feature
git push origin feature

(未经测试,但我认为是对的...)


#11楼

别人已经回答了您的问题。 如果您为分支设置了基准,则需要强制推送该分支。

变基和共享存储库通常不会相处。 这是重写历史。 如果其他人正在使用该分支或已从该分支分支,则重新设置基准将非常不愉快。

通常,对本地分支机构管理来说,改组效果很好。 远程分支管理最适合与显式合并(--no-ff)一起使用。

我们还避免将master合并到功能分支中。 取而代之的是,我们改用母版,但使用新的分支名称(例如,添加版本后缀)。 这避免了在共享存储库中重新设置基准的问题。

功能分支重新设置后,Git推送被拒绝相关推荐

  1. git推送被拒绝可能的原因

    这是我的报错,大概意思就是你推送需要拥有一个私人的邮箱地址,原因是我在gitee中设置了 取消即可推送成功

  2. 如何设置微信公众号粉丝关注后自动推送小程序

    关于微信公众号粉丝关注后自动推送小程序实现,第三方工具微号帮提供了功能粉丝关注定时推送实现,支持微信公众号设置粉丝关注后自动推送小程序,小程序可以以卡片.链接的形式展现给关注粉丝;公众号设置关注推送小 ...

  3. git推送密码_保护代码完整性(六):在 Git 上使用 PGP

    我们继续我们的 PGP 实践系列,来看看签名标签的标签和提交,这可以帮你确保你的仓库没有被篡改. 在本系列教程中,我们提供了一个使用 PGP 的实用指南,包括基本概念和工具.生成和保护你的密钥.如果你 ...

  4. android 本地提醒功能,android中的本地定时推送到通知栏

    一.使用系统定义的Notification 以下是使用示例代码: import android.app.Notification; import android.app.NotificationMan ...

  5. git推送项目到码云(gitee)

    git推送项目到码云(gitee) git推送项目到码云(gitee) 创建账号 创建一个Gitee账号,我使用的是Gitee因为国内速度快~ 本地安装Git 前往 Git 根据操作系统下载Git到本 ...

  6. 织梦火车头采集文章定时自动审核文章及更新文章后自动推送百度(站群排名必备)

    织梦火车头采集文章定时自动审核文章及更新文章后自动推送百度(站群排名必备) 1.从0点到23点可以设置若干时间段,在这些时间段内,每天自动审核和自动生成指定篇数的未审核文章. 2.自动更新网站首页和需 ...

  7. 变更数据推送java_idea 团队成员修改工程后push推送

    idea 团队成员修改工程后push推送 当团队成员修改了工程后,可以进行commit和push操作: 比如我们代码里,加了一段输出: 我们先把项目提交到本地库: 右击项目 -> Git -&g ...

  8. Git推送错误: failed to push some refs to ‘git@gitee.com:XXXXXX’

    项目推送时遇Git推送错误: error: failed to push some refs to 'git@gitee.com:name/project.git' 1.分析: 这个问题的产生是因为远 ...

  9. 【git】git拉取,git推送,git查看,git切换操作命令合集

    文章目录 git拉取 本地连接git账户仓库 本地拉取远程分支代码 git推送 提交代码到远程分支 git查看 查看当前在哪个分支上 查看远程分支 查看所有分支 查看文件在工作区的改动状态 查看文件内 ...

最新文章

  1. manjaro无效的软件包
  2. 70个Python练手项目列表,看了让你茅塞顿开~
  3. redis搭建与安装2
  4. C# ChartControl 控制X轴的间距个数
  5. GPU Gems2 - 11 近似的双向纹理函数(Approximate Bidirectional Texture Functions)
  6. 正则表达式与html信息提取,基于正则表达式的HTML信息提取.pdf
  7. 怎样更改SQL Server 2008的身份验证方式
  8. sql文件中捕获异常_使用更改数据捕获监视SQL Server中的更改
  9. SQL Server2016安装教程
  10. vs2010断点调试详细教程
  11. 怎么裁剪PDF文件页面?一种方法轻松搞定
  12. sql左连接查询,去重复数据
  13. Panel的基本用法
  14. 高数 | 精通中值定理 解题套路汇总
  15. Linux的关键字搜索
  16. ARM与高校联合研制基于机器学习的柔性传感器
  17. 一起学英语第二季第六期
  18. matlab 右边短线,短线和大盘,最简单的短线选股方法
  19. linux电脑支持5g吗,支持5G的全键盘掌上电脑设备Astro Slide
  20. linux系统添加打印机失败,怎么在Linux 系统下安装打印机的驱动 - 驱动管家

热门文章

  1. 3D图形学的线性代数的通俗解释。
  2. Android输入输出机制之来龙去脉之前生后世
  3. Android 线程死锁的案例
  4. Field 'id' doesn't have a default value
  5. python画樱桃小丸子的程序_多任务---线程threading使用总结。
  6. Flutter开发之ListView使用第三方pull_to_refresh加载更多(36)
  7. python微信库wxpy_使用wxpy这个基于python实现的微信工具库的一些常见问题
  8. hashlib模块,md5加密
  9. 架构师应具备的概要技能
  10. java 方法是否需要带参数的情况