撤消git rebase

问题描述 投票:0回答:3

使用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 intellij-idea rebase
3个回答
1
投票

有什么建议?

首先从命令行使用Git,然后在习惯了daily命令之后移动到GUI。

我建议你阅读一下有关git rebase的内容,以便有一些知识可以使用。

git-rebase - 重新应用提交在另一个基本提示之上

(来自:https://git-scm.com/docs/git-rebase

回答...

你正处于一个rebase进程的中间,基于我在GUI上的XP,他们中的大多数都没有正确处理rebase进程。

跟着这些步骤:

  1. 在终端(linux,osx)或Git Bash(windows)中打开存储库文件夹。
  2. 让我们中止并重新开始,在终端执行:"git rebase --abort"。在启动rebase之前,此命令会将主服务器还原为HEAD状态。

从现在开始,让我们通过终端进行rebase,但请记住,像merge一样,rebase也必须从你想要更新的分支启动:

  1. git checkout master或您希望从功能分支获取新提交的分支。
  2. git rebase my_feature_branch:请阅读终端输出!您将获得足以完成此rebase的所有指示。

PS:您可能面临许多步骤和许多git rebase --continue但不要担心这是正常的Git行为。一旦发生冲突,将其修复为普通合并,如果需要,提交并继续。


1
投票

如果rebase尚未完成,只需中止即可。如果rebase由于冲突而停止,则会出现解决它们的提示。如果您在不解决冲突的情况下取消合并提示,则会显示一条通知,其中包含解决冲突,继续和中止Rebase notification的选项

此外,通过持续的rebase,可以在Branches弹出窗口的顶部找到Abort rebase的操作

Branches popup

它也可以在VCS - Git菜单中使用。您始终可以使用“查找”操作(Ctrl + Shift + A)或“搜索无处不在”(双向移动)来查找它。或者在命令行中使用git rebase --abort,例如通过内置终端(Alt + F12打开它)

如果rebase已经完成,您应该将当前分支(仍然是主分支)重置为它以前的提交。除非有未提交的提交,否则您可以将其重置为origin / master所在的同一提交。

如果有未提交的提交,则必须在命令行上使用git reflog来查找提交的哈希值,然后在那里重置当前分支。

认为这会在功能分支的顶部添加master的更改,不幸的是它恰好相反

顺便说一句,IntelliJ显示了澄清行动的提示。在分支弹出窗口中选择操作时,状态栏会显示具有精确分支名称的操作的描述。


0
投票

所以我现在要做的是撤消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?

© www.soinside.com 2019 - 2024. All rights reserved.