Git - 交互式变基和合并的问题

3

我知道在SO上有很多关于这个问题的提问,但我似乎完全找不到我需要的答案。

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

    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个回答

3

既然您说已经推送了四个提交(commits),我猜测您的图表 (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是第一个父提交的父提交,因为你的HEAD是将modelUpdate4合并到master中的,所以它指的是master线路下的两个提交。HEAD^2HEAD的第二个父提交,所以它指的是modelUpdate4线路下HEAD之前的提交。(另请参见: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

如果其他人正在使用这些远程分支,或者您想要保留您的分支历史记录,则不要进行变基。它将重写已经存在于远程库中的历史记录,这只会给其他人带来麻烦。将合并提交推出即可。
或者,您可以直接在 origin/master 上变基。 origin/modelUpdate4 将会消失在 Git 荒野中,但是既然它是一个任务分支,我打赌您正打算将其删除。

谢谢,非常清晰!这张图对于理解HEAD~2的工作原理非常有帮助。 - Tim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接