进入rebase - >与Git合并循环

时间:2014-04-10 18:58:01

标签: git git-merge git-rebase

我有一个分支主线跟踪远程分支原点/主线

我的本​​地分支与远程分支不同步,所以我做了一个git pull,现在当我做git状态时,我得到:

Your branch is ahead of 'origin/mainline' by 2 commits.

现在我想将这些转换成一个提交,所以我跑了

git rebase -i HEAD~2

它打开了我可以压缩提交并选择一个使用的文件。我期待它只显示2个提交(我的原始顶级提交+拉后合并)但它有3个提交,没有合并提交。如果我继续将这些变成单一的Git抱怨我有冲突,(拉动后我遇到的同样的冲突)。

如果我解决冲突并运行git rebase - 继续它最终处于我有2次提交的状态!!请帮我解决这个问题,在这里待了差不多一天!!

1 个答案:

答案 0 :(得分:2)

Rebase通常不会保留合并,您必须传递-p--preserve-merges标志才能使其完成。

但是,您与远程同步的过程不正确,可能会导致您重写已经推送并与其他人共享的提交,这可能会导致同步和冲突方面的许多问题。

如果你想进行壁球,那么你应该取而代之的是拉取和合并,而不是进行拉动和改造:

git fetch origin
git rebase origin/mainline mainline
git rebase -i mainline~2

如果需要,您可以将最后两个命令组合在一起,但是单独执行这些命令的优势在于,您可以通过之后执行git diff mainline@{1}来确认您没有弄乱任何东西。

因此,为了摆脱目前的状况,您可以将硬重置重新设置回mainline^,或者在您尝试执行合并/拉取之前执行的任何提交,然后运行上面的rebase命令。