什么是“合并泡沫”?

我听说过关于Git的“合并泡沫”。 我对Git相当熟悉,但不认为自己是专家。 我听说过一些关于合并泡沫的负面消息。 Git中的“合并泡沫”是什么,它有什么问题,我怎样才能避免它呢?

合并泡沫是Git中的“微不足道的合并”,不需要任何冲突来解决。 当您使用--graph选项时,气泡出现在显示合并的日志中。 例如,如果您运行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 

那里“膨胀”的线是“合并泡沫”。 这似乎无关紧要; 但是很多人认为它比可能发生的可读性低得多,这将是这样的:

 | * 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 | 

…因为没有合并是真的需要。

当通过自动合并来接受一个请求时,通常会发生这种情况。 有时这是由于“合并请求”button在Github上的工作原因。

为了避免合并泡泡与拉请求,一个策略是手动合并。 例如:

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

要从一个拉取请求中删除一个最近提交的合并泡泡(当你还没有推入的时候),一个策略是首先保存你当前的修改,重置你的头部到泡泡之前的提交,用rebase拉动然后push。 例如:

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

参考: http : //adammonsen.com/post/1172