当它说当前分支是最新的时如何重新设置基准,即使它不是?
Posted
技术标签:
【中文标题】当它说当前分支是最新的时如何重新设置基准,即使它不是?【英文标题】:How to rebase when it says that current branch is up to date even though it isn't? 【发布时间】:2016-11-30 16:59:12 【问题描述】:我重新设置了我的分支,其效果是将一些提交置于我自己的之上。然后意识到我忘记了压缩一些提交,所以很难重置和压缩。现在我需要把这些提交带回来。但是变基再次告诉我当前分支是最新的,即使它不是。有没有办法解决这个问题?
编辑:
有两个分支:a 和 b。两者都是从 master 分支的。两者都与主人保持同步。分支 a 有一些变化。我希望分支 b 也有这些更改。我将分支 a 重新定位到 b。最新的提交来自分支 a。我的意思是在提交之前压缩三个提交。我硬重置到最新提交之前。然后我压扁了。现在我想以一种在将分支 b 合并到 master 时不会引起头痛的方式取回最新的提交。
我试过reflog
和git reset --hard HEAD@n
但同样的问题:当前分支是最新的。
【问题讨论】:
“我重新设置了我的分支,它的效果是把一些提交放在我自己的上面。”不是相反(将你的提交放在你重新建立的分支之上)? "so hard reset" 硬重置哪个分支到哪个版本? Undo your bad rebase 然后Rebase Properly When do you use git rebase instead of git merge?的可能重复 这个answer 将有助于了解重新定位的工作原理 【参考方案1】:就我而言,--force-rebase
提供了帮助。我想,在你的情况下,它会是:
git checkout b
git rebase --force-rebase a
【讨论】:
【参考方案2】:如果您有提交的 id,您可以使用交互式 rebase 并手动添加它们。
假设你的原始分支是master
,你可以这样做:
git rebase -i master
你会收到这样的东西:
pick 000000 Name of a commit
pick 000001 Name of another commit
您可以添加另一个 pick bbbbbb
与您要添加的 commitId,类似
pick 000000 Name of a commit
pick bbbbbb
pick 000001 Name of another commit
如果你想压缩一个提交,你可以这样做:
pick 000000 Name of a commit
squash bbbbbb
pick 000001 Name of another commit
壁球操作会将您的较低提交附加到前一个提交,这意味着00000
【讨论】:
【参考方案3】:如果你没有推送那个 rebase,你可以硬重置到远程仓库分支。
git reset --hard origin/your-branch-name
【讨论】:
请不要多次回答同一个问题。 @matt 它们是不同的选项,而不是重复。以上是关于当它说当前分支是最新的时如何重新设置基准,即使它不是?的主要内容,如果未能解决你的问题,请参考以下文章
Git Bash - Git 将分支显示为最新的,而实际上它们不是最新的