首页 > 解决方案 > 使用 git merge 防止不必要的提交

问题描述

我的眼睛都在这个页面上: Git merge without auto commit

我想相信。但我试过了,现实出现了分歧。

我有这个:

git fetch origin;
git merge --no-edit origin;

这似乎会创建新的提交,即使远程分支和本地分支之间没有任何更改。

我不认为使用

 git merge --no-ff origin;

或者

git merge --no-commit origin;

是答案。如果没有更改,如何在不提交的情况下将远程合并到本地?也许根本不做合并,先检查一下是否有区别?

我感到困惑的是--no-commit:如果远程分支有需要合并到本地分支的更改,我假设会中断,因为那不应该总是需要新的提交吗?

标签: gitgit-merge

解决方案


因此,正如 Ry 所提到的,如果远程分支中没有更改,则输出是Already up to date.并且没有提交。因此,我不确定这是否解决了您认为有问题的行为,但我怀疑它可能:

因此,假设您有一个本地更改和一个远程更改,并且您使用您的树拉动遥控器,git fetch git merge 它将如下所示:

£ git log --oneline --graph --decorate
*   153b72e (HEAD -> master) Merge branch 'b2'
|\
| * eb48067 (b2) b2 mod
* | 6397e45 master mod
|/
* 034e374 initial

我们有两个实际提交,现在有一个合并提交。从构建机器或其他东西签入的微小配置更改可能有点混乱。

所以我们可以这样做(而不是git merge):

£ git rebase b2
First, rewinding head to replay your work on top of it...
Applying: master mod
£ git log --oneline --graph --decorate
* 49de99c (HEAD -> master) master mod
* 5019681 (b2) b2 mod
* 1f8b73e initial

除了跳过merge commit,这也跳过identical commits。换句话说,如果远程分支实际上不是您认为的分支(尽管从技术上讲它是),则可以这样做。


推荐阅读