Git 如果我';I’我要删除一个共享分支,可以重新设置基础吗?

Git 如果我';I’我要删除一个共享分支,可以重新设置基础吗?,git,Git,假设我有两个分支-master和feature功能被推送到源代码,多个开发人员正在处理。所有开发人员都完成了他们的工作,提交了它,并推送到了共享分支。我将所有更改拉入本地签出的功能,因此它是最新的 我运行git merge base master feature,它为我提供433c4d34e86c3997ffc0ab1b42bb27acce09b2a6 我只想做一次提交,所以我运行了git-rebase-I 433c4d34e86c3997ffc0ab1b42bb27acce09b2a6。对于第

假设我有两个分支-
master
feature
<代码>功能被推送到源代码,多个开发人员正在处理。所有开发人员都完成了他们的工作,提交了它,并推送到了共享分支。我将所有更改拉入本地签出的
功能
,因此它是最新的

我运行
git merge base master feature
,它为我提供
433c4d34e86c3997ffc0ab1b42bb27acce09b2a6

我只想做一次提交,所以我运行了git-rebase-I 433c4d34e86c3997ffc0ab1b42bb27acce09b2a6。对于第一次提交,我使用
reword
,对于其余的提交,我使用
fixup
。重基完成了,正如预期的那样,它告诉我我的分支和
origin/feature
发生了分歧我不推。

I
git签出主机
,然后
git拉
,最后
git重基主机特性
。最后,我再次
git签出主机
,然后
git合并功能

git status
现在告诉我:

# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
此时,推到原点是否安全?请记住,功能分支将被删除,不再使用,因此我们不担心其他开发人员从这个角度重写他们的历史


或者我在这里遗漏了什么,为什么这很糟糕?也许是一种更好的方法?

我认为这里有两个混淆点

首先,听起来你很关心关于永远不要对已推送的分支重新设置基础的一般建议,但你不确定自己是否理解该建议的原因

其他开发人员可能必须清理其分支副本的状态,这是本指南的原因;因此,一种更好的建议形式是,如果您想重新设置已推送/与他人共享的分支的基础,您需要获得拥有该分支副本的所有人的同意

如果每个人都同意他们不再在<代码>功能上做任何工作,并且在<代码>功能上所做的所有工作都已被推送,并且他们只是要删除<代码>功能;然后,通过重新设置
功能的基址
,就不会为任何人创建额外的工作,任何人都不应该对此有问题

但即使这样也没关系,因为您已经描述了一种情况,您正准备推送
master
。以上仅适用于您要按下
功能的情况。。。如果只是你要删除的一个分支,你为什么要这么做?如果要在本地删除
功能
,请按delete键

因此,我假设您认为分支和提交之间存在某种内部关系,分支现在或过去都可以达到。没有。您想要推送到
master
的提交来自
feature
的rebase,这一事实对git没有任何意义。它仍然只是
master
上的一个新提交

(这引起了人们对另一点的注意:您已经花了很长的时间进行了交互式重基。可能是为了操纵默认的提交消息或其他什么?但是如果您想在一次提交到
主程序中应用
功能
的所有更改,最简单的方法是

git checkout master
git merge --squash feature

这就像你的程序一样,有时会引起头痛,但如果你只是想放弃
功能,通常也没问题。

如果你这么做,就不会重写任何历史记录。它将向master添加一个commit。实现这一点的更快方法是
git merge--squash功能
>*您需要得到拥有分支副本的所有人的同意*。不完全是。。。因为git是分散的,所以您不一定知道所有的开发人员。因此,你应该知道这会惹恼别人,但你应该决定重写是否值得,并尽可能多地交流(前后)。@Philippe-你有权发表你的意见;我希望我们永远不要在同一个项目上工作。