3

我知道有很多关于这个的问题,但我似乎根本找不到我正在寻找的答案。

我刚刚将我的任务分支合并到我的主分支中,我准备将我的更改推送到远程主分支。但是,它们显示为两个提交:

    commit 878c07412aab6a6b06b7fc8dd84c2418cc4f31d8
Merge: 9ffa590 c9f5552
Author: ***
Date:   Mon May 21 16:02:36 2012 +0100

    Merge branch 'modelUpdate4'

    Conflicts:
        ***.xcodeproj/project.pbxproj

commit c9f5552862872673317701c3dffd7fb6b6daa02c
Author: ***
Date:   Mon May 21 15:03:21 2012 +0100

    Modified model according to requests.  Repopulated seeded database.

这是 git log 的输出,我希望将两个提交压缩为一个。但是,当我这样做时:

git rebase -i HEAD~2

它实际上只显示 4 个先前提交(和推送)的提交。我是否误解了我的分支是如何合并回来的?如果我尝试 git rebase -i 这只会显示 git 日志列表中的第一个提交。

谢谢!

4

1 回答 1

3

既然你说已经推送了四个提交,我猜你的图(git log --oneline --decorate --graph)看起来像这样,你有分支提交,master并且modelUpdate4已经推送到远程仓库:

* (master, modelUpdate4, HEAD) Merge branch 'modelUpdate4'
| \
|  * (origin/modelUpdate4) Modified model according to requests. [HEAD^2]
|  |
|  * Another commit on modelUpdate4
|  |
|  * Yet another commit on modelUpdate4!
|  |
*  | (origin/master) Something that conflics with a commit in modelUpdate4 [HEAD~1]
| /
* Previous commit on master [HEAD~2]

HEAD~2是第一个父级的第一个父级,并且由于 yourHEAD是 into 的合并modelUpdate4master它指的是两个提交masterHEAD^2是第二个父母,所以在下线HEAD's之前提交。(另见: http: //paulboxley.com/blog/2011/06/git-caret-and-tildeHEADmodelUpdate4

如果HEAD~2是您的新基地,您将在一条直线HEAD~2之间获得所有提交。master您还必须在发生的modelUpdate4提交中处理分支冲突。

* (master, HEAD) Merge branch 'modelUpdate4'
|
* Modified model according to requests.  Repopulated seeded database.
|
* Another commit on modelUpdate4
|
* Yet another commit on modelUpdate4!
|
* Something on master that conflics with modelUpdate4
|
* Previous commit on master

如果其他人正在使用这些远程分支,或者您想维护您的分支历史记录,请不要变基。它会重写远程仓库中已经存在的历史记录,这对其他所有人来说都是一件头疼的事情。将合并提交推出,您将获得成功。

或者,您可以直接变基到origin/master. origin/modelUpdate4最终会出现在 git boonies 中,但由于它是一个任务分支,我打赌你无论如何都会删除它。

于 2012-05-21T17:25:09.763 回答