我知道关于此问题有很多问题,但我似乎无法找到我正在寻找的答案。
我刚将我的任务分支合并到我的主人,我准备将我的更改推送到远程主分支。但是,它们显示为两个提交:
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日志列表中的第一个提交。
谢谢!
答案 0 :(得分: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
是第一个父级的第一个父级,由于您的HEAD
是modelUpdate4
到master
的合并,因此它引用了master
下的两个提交。 1}}行。 HEAD^2
是HEAD's
第二个父级,因此在HEAD
之前提交modelUpdate4
行。 (另见:http://paulboxley.com/blog/2011/06/git-caret-and-tilde)
如果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
如果其他人正在使用这些远程分支机构,或者您希望维护分支历史记录,请不要进行rebase。它将重写已存在于远程仓库中的历史记录,这对其他所有人来说都是一个令人头痛的问题。推出合并提交,你会变得很好。
或者,您可以直接转换到origin/master
。 origin/modelUpdate4
最终会出现在git boonies中,但由于它是一个任务分支,我打赌你无论如何都会删除它。