我有一个分支主线跟踪远程分支原点/主线
我的本地分支与远程分支不同步,所以我做了一个git pull,现在当我做git状态时,我得到:
Your branch is ahead of 'origin/mainline' by 2 commits.
现在我想将这些转换成一个提交,所以我跑了
git rebase -i HEAD~2
它打开了我可以压缩提交并选择一个使用的文件。我期待它只显示2个提交(我的原始顶级提交+拉后合并)但它有3个提交,没有合并提交。如果我继续将这些变成单一的Git抱怨我有冲突,(拉动后我遇到的同样的冲突)。
如果我解决冲突并运行git rebase - 继续它最终处于我有2次提交的状态!!请帮我解决这个问题,在这里待了差不多一天!!
答案 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命令。