使用intelliJ我正在开发一个功能分支,我希望将我的团队在master上所做的更改集成到我的分支中,但我搞砸了。
我检查了大师,从Git弹出我选择了功能分支并选择'rebase current into selected'认为这会在master功能分支的顶部添加更改,不幸的是它恰好相反。所以我现在要做的是撤消master上的rebase,我想把master带回最新的head commit。
有什么建议?
我读到rebasing创建了一个新的提交,但我认为这没有通过因为我有冲突,当从git命令行我从master运行git status
时我看到:
You are currently rebasing branch 'master' on 'FEATURE/....'.
(fix conflicts and then run "git rebase --continue")
(use "git rebase --skip" to skip this patch)
(use "git rebase --abort" to check out the original branch)
no changes added to commit (use "git add" and/or "git commit -a")
有什么建议?
首先从命令行使用Git,然后在习惯了daily命令之后移动到GUI。
我建议你阅读一下有关git rebase
的内容,以便有一些知识可以使用。
git-rebase - 重新应用提交在另一个基本提示之上
(来自:https://git-scm.com/docs/git-rebase)
回答...
你正处于一个rebase进程的中间,基于我在GUI上的XP,他们中的大多数都没有正确处理rebase进程。
跟着这些步骤:
"git rebase --abort"
。在启动rebase之前,此命令会将主服务器还原为HEAD状态。从现在开始,让我们通过终端进行rebase,但请记住,像merge一样,rebase也必须从你想要更新的分支启动:
git checkout master
或您希望从功能分支获取新提交的分支。git rebase my_feature_branch
:请阅读终端输出!您将获得足以完成此rebase的所有指示。PS:您可能面临许多步骤和许多git rebase --continue
但不要担心这是正常的Git行为。一旦发生冲突,将其修复为普通合并,如果需要,提交并继续。
如果rebase尚未完成,只需中止即可。如果rebase由于冲突而停止,则会出现解决它们的提示。如果您在不解决冲突的情况下取消合并提示,则会显示一条通知,其中包含解决冲突,继续和中止的选项
此外,通过持续的rebase,可以在Branches弹出窗口的顶部找到Abort rebase的操作
它也可以在VCS - Git菜单中使用。您始终可以使用“查找”操作(Ctrl + Shift + A)或“搜索无处不在”(双向移动)来查找它。或者在命令行中使用git rebase --abort
,例如通过内置终端(Alt + F12打开它)
如果rebase已经完成,您应该将当前分支(仍然是主分支)重置为它以前的提交。除非有未提交的提交,否则您可以将其重置为origin / master所在的同一提交。
如果有未提交的提交,则必须在命令行上使用git reflog来查找提交的哈希值,然后在那里重置当前分支。
认为这会在功能分支的顶部添加master的更改,不幸的是它恰好相反
顺便说一句,IntelliJ显示了澄清行动的提示。在分支弹出窗口中选择操作时,状态栏会显示具有精确分支名称的操作的描述。
所以我现在要做的是撤消master上的rebase,我想把master带回最新的head commit。
据推测,您正在使用托管在某个服务器上的存储库的本地副本。在这种情况下,在该服务器上有一个非常好的版本的master
分支,你只需要告诉git用服务器上的那个替换你的本地master
。让我们说共享的回购称为upstream
。您可以执行以下操作:
git checkout master
确保你真的像你期望的那样在master
分店。您将要删除所有对master
分支的本地更改,因此确保您位于正确的位置是值得的。然后:
git fetch upstream master
git reset --hard upstream/master
在此之后,你的master
应该同意服务器上的那个。有关此主题的更多信息,请查看相关问题How do I force “git pull” to overwrite local files?。