Git重新设置推送特性分支的基础

Git重新设置推送特性分支的基础,git,Git,我有一个长期运行的本地特性分支,我定期与master挤压和重定基址,以使其在本地保持最新 完成后,我希望我的功能在一个单一的挤压提交上的主 然而,我担心在硬件问题的情况下会丢失我的工作,所以我把它推到github上的一个新特性分支上作为预防措施。既然这样做了,我真的不知道如何使我的功能分支保持最新,因为它已经被推送了(我宁愿不合并来自主创建合并提交的更改) 我是唯一使用此功能分支的开发人员。因此,我并不担心在一个已经推出的分支上重写历史。将额外的提交推送到我的远程功能分支上,在我完成该功能后挤压

我有一个长期运行的本地特性分支,我定期与master挤压和重定基址,以使其在本地保持最新

完成后,我希望我的功能在一个单一的挤压提交上的主

然而,我担心在硬件问题的情况下会丢失我的工作,所以我把它推到github上的一个新特性分支上作为预防措施。既然这样做了,我真的不知道如何使我的功能分支保持最新,因为它已经被推送了(我宁愿不合并来自主创建合并提交的更改)

我是唯一使用此功能分支的开发人员。因此,我并不担心在一个已经推出的分支上重写历史。将额外的提交推送到我的远程功能分支上,在我完成该功能后挤压该分支,然后将其重设到主功能上,这样可以吗?或者git会因为分支已经是公共的,而抛出一些分支分叉的错误吗

或者,我在想,当我的工作完成后,我可以简单地取消跟踪远程功能分支(这样我的本地分支就不再与远程分支有关联),挤压本地功能分支中的提交,然后在master上本地重新设置我的功能分支的基础

将额外的提交推送到我的远程功能分支上,在我完成该功能后挤压该分支,然后将其重设到主功能上,这样可以吗

对,对,对。既然你说你不怕重写这个分支的历史,你可以用它做任何你想做的事情

或者git会因为分支已经是公共的,而抛出一些分支分叉的错误吗

Git没有公共和私有分支的概念。 您可以公开或私下使用分支, Git不会对此抱怨的

当您在
master
上重新设置分支的基础时, 基本上,您可以从
master
中的时间线分支点开始重放提交。 如果在该点之后,
master
中有提交, 在这一点之后,您在功能分支中进行了提交, 然后
master
和您的分支发生分歧。 重新设置基址时,可能会发生冲突, 取决于两个分支中的变化

总之,您可以在未记录的功能分支中执行任何您想要的操作,然后在
master
上重新设置基础。 当然,这取决于你做什么, 重新定基可能更容易(很少或没有冲突)或更难(很多冲突)。 你经常重新定基可能是件好事, 这样你就能一点一点地发现冲突,
而不是一下子发生很多冲突。

我发现这篇文章似乎表明需要使用“强制”选项:这篇文章似乎是指功能分支,这是可以接受的。我可以想象这相当于我的B计划,即取消对远程分支的跟踪,在本地挤压和重定基址,然后创建一个新分支。在功能分支上简单地使用-force似乎更容易。当您重写远程分支的历史记录时,
--force
是必要的(并且您了解其后果)。如果您愿意,您可以通过推送到新的功能分支而不重写或删除旧的分支来保留许多备份。局部跟踪和取消跟踪对挤压和重定基没有影响。本地跟踪的目的只是为了减少某些操作中的键入或改进显示,它非常美观,并且不会干扰版本控制操作。这似乎会给所有其他开发人员在将分支拉到本地repo时带来问题。