我在用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
报错如下
过一遍流程。
$ 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 个赞
因为你在 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 端看起来又不违和。