Git - 交互式Rebase和Squashing的问题

时间:2012-05-21 15:23:06

标签: git rebase squash

我知道关于此问题有很多问题,但我似乎无法找到我正在寻找的答案。

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

    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日志列表中的第一个提交。

谢谢!

1 个答案:

答案 0 :(得分:3)

由于您已经推送了四个提交,我猜您的图表(git log --oneline --decorate --graph)看起来像这样,您已经在mastermodelUpdate4之间进行了分支提交推到远程仓库:

* (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是第一个父级的第一个父级,由于您的HEADmodelUpdate4master的合并,因此它引用了master下的两个提交。 1}}行。 HEAD^2HEAD's第二个父级,因此在HEAD之前提交modelUpdate4行。 (另见:http://paulboxley.com/blog/2011/06/git-caret-and-tilde

如果HEAD~2是您的新基础,您将获得HEAD~2master之间的所有直接提交。您还必须在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

如果其他人正在使用这些远程分支机构,或者您希望维护分支历史记录,请不要进行rebase。它将重写已存在于远程仓库中的历史记录,这对其他所有人来说都是一个令人头痛的问题。推出合并提交,你会变得很好。

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