有关一个git merge的问题

我在用git merge foobranch 的时候总是会额外产生一次提交。

一般我的工作方式是这样的,有需求了,按照需求去开一个分支(mail 分支)

我在mail上会有若干次提交,但是当我准备把mail合并到master的时候。我会把mail分支上的新的提交rebase成一条(为了保证master版本树的整洁)。然后再使用git merge mail 去合并代码。

但是每次git merge mail 都会额外产生一条commit,就很烦.

想知道如何才能避免那条Merge branch mail

那个merge branch mail的commit 是merge 要求我commit 的。

你是不是哪里配置了 git merge 会默认使用 --no-ff 选项?

重来一把,试试 git merge --ff-only mail 是什么情况

道友,你这个等高是用font-scale配的还是本来就等高呢的呢?如果本来就等高,求一个中英文字体。

我字体用的是dejavu sans mono. 配置用的是centaur emacs

(when (display-graphic-p)
  ;; Set default font
  (cl-loop for font in '("DejaVu Sans Mono" "SFMono Nerd Font Mono" "SFMono Nerd Font"  "Hack" "Source Code Pro" "Fira Code" "Menlo" "Monaco" "Consolas")
           when (font-installed-p font)
           return (set-face-attribute 'default nil
                                      :font font
                                      :height (cond (sys/mac-x-p 150)
                                                    (sys/win32p 105)
                                                    (t 110))))

字体大概就是cl-loop 里面对应的,会默认选择第一个找到的。我现在用的DejaVu Sans Mono

我没敢在项目分支里面用 但是我自己弄了个测试环境 1 现在master 分支上建一个bran分支 2 在master 上进行修改,然后commit 3 在bran 上修改然后commit

最后用 git merge --ff-only bran 报错如下 image

过一遍流程。

$ git checkout mail

$ git commit -m "a"

$ git commit -m "b"

$ git commit -m "c"

$ git rebase master

$ git checkout master

$ git merge mail

理论上就会触发fast forward。

2 个赞

好的,谢谢道友

1 个赞

因为你在 master 也提交了一次,没法直接 fast-forward(需要一个分支的所有提交都在另外一个分支之上才行,可以先用 git log --all 看下)

1 个赞

建议保留这个 merge commit。

当一个 patch 或 feature 分支有多个提交,且直到最后一个提交功能才完整,这时我会特意 no-ff。只有一个提交并且很快就完成时,则可以选择 fast forward。

这个多余的提交并不会让 master 树变混乱,它只是长长的历史中一短插曲,却保留了很重要的信息。

对比以下两种情形:


master1 ---a---b---e---f---d'---....---->
               |           |
          feat '---c---d---'

master2 ---a---b---e---f---c---d---....---->

从 master1 可以知道 feat 的起止位置,并且知道 c 是未完工的状态。而 master2 则丢失了这个信息。

把提交记录压成一条直线,只是制造了是视觉上的整洁,对于以后的回顾&理解却成了障碍。

2 个赞

主要是,公司用的svn。我其实用的git-svn 拉的公司的项目。老大说要保证svn上面的版本树干净,如果有那个merge commit 那我git svn dcommit 上去的提交就只会在svn长产生那条merge commit。但是我在mail上的commit 信息就没有了。

也就是说,无论你在 git mail 分支提交了多少次,提交到 svn 只有一个 commit?

那么你可以编辑 merge commit 信息,让它好看一些。这样本地即保留了分支信息,svn 端看起来又不违和。

这样确实是个好办法,nice。