首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实现不允许的“`git -no-ff-ff- is”?

如何实现不允许的“`git -no-ff-ff- is”?
EN

Stack Overflow用户
提问于 2013-03-26 07:49:05
回答 2查看 4.2K关注 0票数 24

作为我们重基工作流程的一部分,我希望在主分支上使用合并。特别是,我只想在主题分支被重新基于最近的主提交时进行合并,从而使任何合并都成为快速提交。我可以通过以下方式实现这一点:

git merge --ff-only

此外,我想记录主题分支与空提交的集成,这就是为什么我想使用--no-ff来强制这种行为:

git merge --no-ff

不过,我真正想要的是两者的结合:只有在琐碎的情况下才合并,但无论如何让我记录一下。吉特认为

fatal: You cannot combine --no-ff with --ff-only.

这在某些人看来是不言而喻的。

git merge --edit --no-ff topicbranch

也不能达到我想要的行为。那么,当所讨论的主题分支被重新基于最新的主提交时,我如何与--无-ff选项合并呢?

最新消息:看来查尔斯·贝利的回答会奏效。如果您希望将其转换为git别名,您可以在这里发出以下命令:

代码语言:javascript
复制
git config --global alias.integrate '!test "$(git merge-base HEAD "$1")" = "$(git rev-parse HEAD)" && git merge --no-ff --edit $1 || echo >&2 "Not up-to-date; refusing to merge, rebase first!"'

有点口香糖,但很管用。注意使用选项--edit编辑提交消息的力度。

EN

回答 2

Stack Overflow用户

发布于 2013-03-26 10:37:14

我已经为我的简单测试创建了一个别名

代码语言:javascript
复制
git config --global alias.ffmerge '!sh -c "git merge --ff-only $1 && git reset --hard HEAD@{1} && git merge --no-ff $1" -'

它由三个命令组成,一个接一个,一旦第一个命令失败,就会失败。解释每一项:

代码语言:javascript
复制
git merge --ff-only $1

如果合并不能作为快速转发合并继续,则将失败。($1是作为参数传入的分支名称)

代码语言:javascript
复制
git reset --hard HEAD@{1}

如果第一个命令成功,这意味着我们可以进行一个快速转发合并,但是当我们想要进行合并提交时,我们将返回到(成功的)合并之前的HEAD状态。HEAD@{1}是一个reflog指针。

代码语言:javascript
复制
git merge --no-ff $1

现在,我们将使用合并提交来完成真正的合并,即使合并可以作为一个快速向前处理。

git ffmerge的简单调用将为我们完成整个任务,唯一可能失败的步骤是第一步,这将使我们像以前一样处于一个不变的工作副本中。

git reset --hard一样,工作副本应该是干净的。

票数 2
EN

Stack Overflow用户

发布于 2017-03-10 12:04:36

代码语言:javascript
复制
git config alias.mff '!mff() { git merge --ff-only "$1" && git reset --hard HEAD@{1} && git merge --no-ff "$1"; }; mff'

从那以后

代码语言:javascript
复制
git mff other-branch
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15631890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档