是否可以配置git以防止已经发布的提交的变基?

时间:2015-05-31 11:32:20

标签: git

我想使用git pull --rebase而不是合并,但是使用这种方法可能会意外地重新推送已经推送到另一个遥控器的提交。
在这种情况下,拉取合并是强制性的。

有没有办法配置git所以如果一些要重新提交的提交已被推送到其他远程,它会拒绝rebase?

2 个答案:

答案 0 :(得分:1)

尝试此命令:

git rebase --onto <remote>/<branch-name> $(git rev-list HEAD \
 --not --exclude=$(git rev-parse --symbolic-full-name HEAD) \
 --glob=refs/* --reverse | head -1)~

这将仅修改在当前本地分支上执行的提交。

如果要将本地更改包含到尚未推送的其他分支中,请将--glob=refs/*表达式更改为--remotes。请注意,虽然您将来可以推动这些本地分支机构,但请谨慎使用。

<强>澄清: 当然,由于您没有使用git pull,因此您需要在重新定位之前执行git fetch。 (我更喜欢git fetch + git rebasegit merge,这样我就可以控制我正在进行或合并的内容。)

答案 1 :(得分:0)

您可以编写钩子来检查提交范围内的任何提交是否已经存在于目标分支中,如果是这样的话(如拒绝推送)

使用git命令git branch --contains <commit1> ... <commit_n>,您可以检查give分支是否包含任何给定的提交。

Sumarry

git没有任何开箱即用的东西,你必须编写一些自定义代码来执行此操作,您可以使用git branch --contains查看是否branch已经有了给定的提交。