【问题标题】:git merge with --no-ff and --squashgit 与 --no-ff 和 --squash 合并
【发布时间】:2013-05-25 11:34:19
【问题描述】:

我正在使用 git flow 方式来管理我的仓库中的分支,如下所述: http://nvie.com/posts/a-successful-git-branching-model/

因此我应该使用的命令顺序如下:

git checkout mybranch
git pull --rebase origin develop
git checkout develop
git merge --no-ff mybranch

但是,在某些情况下,我想做不同的一件事:

我想保留我的功能分支 (mybranch) 上的所有提交,但在合并到 develop 时将它们集中在一起(或压缩)成一个差异。

所以这就是我认为的命令序列应该是:

git checkout mybranch
git pull --rebase origin develop
git checkout develop
git merge --no-ff --squash mybranch

如果我将--no-ff 与--squash 结合起来,我会做错吗?

由于“压缩”和“保留历史”是正交的要求,我很犹豫是否要尝试这一点 - 请参阅 Squashing all of my commits (including merges) into one commit without altering history

我的理由是我想在一个分支 (mybranch) 上保留历史记录,并在另一个分支 (develop) 上保留 suqash --> 因为这些操作是在单独的分支中执行的,所以可以。

【问题讨论】:

  • 你为什么不试试看。如果它不起作用,您可以随时努力 reset。就在老地方做一个临时分支。继续。试试吧。你知道你想...

标签: git merge branch squash fast-forward


【解决方案1】:

我尝试将 --squash 和 --no-ff 组合在一起并得到:

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

一个 git merge 基本上是一个壁球。解决冲突后,它将在开发时显示为一次提交。合并修订的差异是冲突解决的结果。是的,mybranch 上的更改被保留。合并后只需执行“gitk mybranch &”即可验证。

除了影子是正确的。不要害怕。创建一个新分支,试一试,看看结果如何。

损坏是在您的“git pull --rebase origin develop”命令中造成的。

回答(假设您有基于 origin/develop 的本地开发分支):

git checkout develop
git pull
git merge --no-ff mybranch

【讨论】:

  • 到底谁是“影子”?你是说“纸杯蛋糕”吗?
  • 我的猜测是有人更改了他们的名字或删除了我发布后的答案。
  • 无法编辑帖子,因为“队列已满”...看来我不是第一个尝试的人。句子“一个 git merge 基本上是一个 squash。解决冲突后,它将在开发时显示为一次提交。”具有误导性。 git merge 仅被恰当命名的 --squash 选项压扁。否则,它将所有提交从一个分支带到另一个分支。
猜你喜欢
  • 1970-01-01
  • 2012-03-24
  • 2011-07-31
  • 1970-01-01
  • 2012-08-12
  • 1970-01-01
  • 2013-12-13
  • 2013-10-18
  • 2016-05-19
相关资源
最近更新 更多