如何将我的分支合并到团队主控而不需要丑陋的合并信息

Bor*_*ris 1 git merge

develop我从团队的分支复制了自己的分支master,并且编写了一些代码来在develop分支上开发一些功能,同时该master分支也由其他团队成员开发。

现在我完成了我的模块并希望mergemaster分支,但我像这样设置我的 git:

$ git config --global merge.ff only
Run Code Online (Sandbox Code Playgroud)

现在当我尝试这样做时merge,它给出了

fatal: Not possible to fast-forward, aborting.
Run Code Online (Sandbox Code Playgroud)

那么我应该成功地执行哪些命令Terminalmerge并且日志上没有丑陋的合并信息。

请具体点,非常感谢。

更新:我不知道为什么人们投票支持关闭,因为这对于 git 菜鸟来说是一个非常典型的头痛问题。

如果有重复,请将它们引导到此处,因为我认为答案非常好,如果这与代码/编程无关,请帮助或告诉我应该将其移至何处。

Ald*_*ath 5

我将用一个例子来说明一些替代方案。

假设您已在分支上进行了以下两次“开发提交”提交develop,同时对分支进行了两次提交master

* c302cd7 - (HEAD, develop) Develop commit 2
* 0a1fad1 - Develop commit 1
* fcf19a0 - Common commit
Run Code Online (Sandbox Code Playgroud)

替代方案 1:git 合并

合并developmaster. IE。:

git checkout master
git merge develop
Run Code Online (Sandbox Code Playgroud)

这将导致历史记录如下所示:

*   e33bcaf - (HEAD, master) Merge branch 'develop'
|\  
| * c302cd7 - (develop) Develop commit 2
| * 0a1fad1 - Develop commit 1
* | 784442c - Master commit 2
* | 03c7803 - Master commit 1
|/  
* fcf19a0 - Common commit
Run Code Online (Sandbox Code Playgroud)

据我了解,你不希望这样。您想避免合并提交(e33bcaf在上面的示例中)

替代方案 2:git merge --squash

这种方法将从分支中获取所有更改develop并将它们捆绑在一起到一次压缩提交中。

git checkout master
git merge --squash develop
git commit
#enter apporpriate commit message describing the changes from develop branch
Run Code Online (Sandbox Code Playgroud)

历史将如下所示:

* 2fd2acc - (HEAD, master) Develop branch squash commit
* 784442c - Master commit 2
* 03c7803 - Master commit 1
* fcf19a0 - Common commit
Run Code Online (Sandbox Code Playgroud)

替代方案 3:git rebase

您可以让 git 尝试重现您在develop分支上所做的相同更改,但从 master 分支的最新版本开始。develop请注意,如果这是其他人正在使用的已发布分支,那么这不是一个好主意。但如果develop 只是您自己的本地分支机构,那就没问题。

git checkout develop
git rebase master
Run Code Online (Sandbox Code Playgroud)

历史将如下所示。如果您愿意,在此之后,您可以将develop 分支合并到master分支中,并且该合并将是快进。

* f1e329c - (HEAD, develop) Develop commit 2
* 066affd - Develop commit 1
* 784442c - (master) Master commit 2
* 03c7803 - Master commit 1
* fcf19a0 - Common commit
Run Code Online (Sandbox Code Playgroud)

请注意,对于所有三种替代方案,您可能必须解决合并冲突(如果有)。