git - 什么是 "merge bubble"?

标签 git

我听说过关于 Git 的“merge 气泡”。我相当精通 Git,但不会认为自己是专家。我听说过一些关于 merge 气泡的负面消息;什么是 Git 中的“merge 气泡”,它有什么问题,我该如何避免?

最佳答案

merge bubble 是 Git 中的“简单 merge ”,不需要解决任何冲突。当您使用 --graph 选项时,气泡出现在显示 merge 的日志中。例如,如果您运行 git log --graph,您可能会看到如下内容:

| |
* |   commit d79f3c4e129356b055c659ee5be28081c1f38aa1
|\ \  Merge: 09bf1ed 4ef9a23
| | | Author: Peter <peter@example.com>
| | | Date:   Wed Sep 17 17:21:07 2014 -0400
| | |
| | |     Merge branch 'master' of http://fictitiousrepo.visualstudio.com/DefaultCollection/_git/fictitiousproject
| | |
| * | commit 4ef9a2387f0d4db39a6cab8ff8f531815935c305
| | | Author: Andrew <andrew@example>
| | | Date:   Tue Sep 16 11:54:14 2014 -0500
| | |
| | |     updated changelog
| | |
* | | commit 09bf1ed0125d77c26b5760939c125998bb046e9a
|/ /  Author: Peter <peter@example.com>
| |   Date:   Wed Sep 17 17:20:30 2014 -0400
| | 
| |       fixed some bugs

线条“凸出”的地方是“merge 气泡”。这似乎无害;但许多人认为它的可读性远低于可能发生的情况,就像这样:

|
* commit 09bf1ed0125d77c26b5760939c125998bb046e9a
| Author: Peter <peter@example.com>
| Date:   Wed Sep 17 17:20:30 2014 -0400
|
|     fixed some bugs
|
* commit 4ef9a2387f0d4db39a6cab8ff8f531815935c305
| Author: Andrew <andrew@example>
| Date:   Tue Sep 16 11:54:14 2014 -0500
|
|     updated changelog
|

...因为实际上不需要 merge

这通常发生在通过自动 merge 接受 pull 请求时。有时这是由于“merge pull 请求”按钮过去在 Github 上的工作方式所致。

为避免 pull 请求出现 merge 气泡,一种策略是手动 merge 。例如:

git checkout master
git remote add remoteorigin git://remotegithost.com/remotegitrepo/remotegitproject
git fetch remoteorigin 
git merge remoteorigin/remoteprojectbranch
git push origin master

要从 pull 请求中删除最近提交的 merge 气泡(当您还没有推送时),一种策略是首先存储您当前的更改,将您的头重置为气泡之前的提交,使用 rebase 进行 pull ,然后推送。例如:

git stash save
git reset --hard HEAD~1
git pull --rebase
git push origin HEAD

引用: http://adammonsen.com/post/1172

关于git - 什么是 "merge bubble"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26239379/

相关文章:

尝试直接从 Ansible 克隆时出现 Git fatal error

Git 不认为 gpg key 是 secret ,即使它是,我该如何修复它?

git - 下载 GitLab 私有(private)仓库

git - 你在尚未诞生的 Twig 上

git - 将多个 .gitignore 文件(本地和远程)保存在同一个存储库中

Git:我在 bitbucket 网页中挑选的提交在哪里?

git - git push 和 git push origin master 的区别

git show 远程存储库(显示单个文件的内容)

git - 如何使用 Git/IntelliJ 将整个文件从一个分支移动/复制到另一个分支?

git checkout 不重置文件