Git对推送的功能分支进行重新设置

nog*_*bag 6 git

我有一个长期运行的本地功能分支,我定期与master进行挤压和重新定位,以使其在本地保持最新。

完成后,我希望我的功能在主节点上的单个压缩提交中。

但是,我担心由于硬件问题而失去工作,因此作为预防措施,我将其推送到github上的新功能分支。自从这样做以来,我真的不确定如何使功能分支保持最新状态,因为它已经被推送了(我宁愿不合并来自主创建合并提交的更改)。

我是唯一使用此功能分支的开发人员。因此,我不必担心在已经推送的分支上重写历史记录。将其他提交推送到我的远程功能分支,然后在完成功能后压扁该分支,然后将其重新建立为基础就可以了吗?还是因为分支已经公开,git会对分支分支抛出一些错误?

或者,我以为完成工作后,可以简单地取消跟踪远程功能分支(因此我的本地分支不再与远程分支有关联),将提交压缩在本地功能分支中,然后重新建立我的功能在master上本地分支。

Sto*_*ica 6

可以将额外的提交推送到我的远程功能分支,当我完成该功能时压缩该分支,然后将其重新设置为 master 吗?

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

或者 git 会抛出一些关于分支分歧的错误,因为分支已经公开了?

Git 没有公共和私有分支的概念。你可以公开或私有地使用分支,Git 不会抱怨这一点。

当您在 之上重新建立分支时master,您基本上是从 中时间线的分支点重放您的提交master。如果在那之后有提交master,并且您在该点之后在功能分支中进行了提交,那么master您的分支就出现了分歧。当你rebase时,可能会出现冲突,具体取决于两个分支的变化。

总之,您可以在未记录的功能分支中执行任何您想要的操作,然后在master. 当然,根据您所做的事情,变基可能更容易(很少或没有冲突)或更困难(很多冲突)。经常 rebase 可能是件好事,这样你就可以一点一点地发现冲突,而不是一次发现很多冲突。

  • 当您重写远程分支的历史记录时,“--force”是必要的(并且您了解后果)。如果需要,您可以通过推送到新功能分支而不重写或删除旧功能分支来保留许多备份。本地跟踪和取消跟踪对压缩和变基没有影响。本地跟踪的目的只是为了减少某些操作中的输入或改进显示,它非常美观,并且不会干扰版本控制操作。 (3认同)
  • 我发现这篇文章似乎表明需要使用“force”选项:http://stackoverflow.com/questions/8939977/git-push-rejected-after-feature-branch-rebase (2认同)