我要使用intelliJ来开发功能分支,我想将团队在master上所做的更改集成到我的分支中,但是我搞砸了。
我签出了master,从Git弹出窗口中选择了功能分支,然后选择了“将当前基础重新设置为选定的”,以为这会将来自master的更改添加到功能分支的顶部,不幸的是,情况恰恰相反。
因此,我现在想做的是撤消基于master的此基础,我想将master恢复到最新的head commit。
有什么建议吗?
我读到,重新定基会创建一个新的提交,但是我认为那没有完成,因为我有冲突,当我从git命令行运行master的FAILED. Reason: Parameters: [ssm:myparam:1] cannot be found.
时,我看到:
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)
答案 0 :(得分:1)
有什么建议吗?
首先从命令行使用Git,在习惯了日常命令后才移至GUI。
我建议您阅读一些关于git rebase
的知识,以便有一些知识可以使用。
git-rebase-重新应用在另一个基本提示上
(来自:https://git-scm.com/docs/git-rebase)
正在回答...
您正处于重新设置过程的中间,并且基于我在GUI上的XP,其中大多数不能正确处理重新设置过程。
请按照以下步骤操作:
"git rebase --abort"
中执行。在开始 rebase 之前,此命令会将您的 master 还原为 HEAD 状态。从现在开始,让我们通过终端进行 rebase ,但请记住,像合并一样,rebase也必须从要更新的分支开始:
git checkout master
或您要从功能分支获取新提交的分支。git rebase my_feature_branch
:请阅读终端输出!。您将拥有足够的说明来完成此基础操作。 PS:您可能会面临许多步骤和许多git rebase --continue
,但请不要担心这是正常的Git行为。一旦发生冲突,请将其修复为普通合并,并在需要时提交并继续。
答案 1 :(得分:1)
如果重新设置尚未完成,请中止它。如果由于冲突而停止了rebase,则会出现解决它们的提示。如果您取消合并提示而未解决冲突,则将显示一条通知,其中包含解决冲突,继续和中止的选项
此外,随着正在进行的重新设置,在“分支”弹出窗口的顶部可以执行“中止重新设置”操作
它在VCS-Git菜单中也可用。您可以始终使用查找操作(Ctrl + Shift + A)或随处搜索(双移)进行查找。或在命令行中使用git rebase --abort
,例如通过内置终端(Alt + F12将其打开)
如果重新设置已经完成,则应将当前分支(仍是主分支)重置为以前启用的提交。您可以将其重置为原始/主服务器所在的提交,除非有未推送的提交。
如果存在未推送的提交,则必须在命令行上使用git reflog来查找提交的哈希,然后在此处重置当前分支。
认为这会在功能分支的顶部添加来自master的更改,不幸的是,情况恰恰相反
顺便说一句,IntelliJ显示提示以阐明操作。在分支弹出窗口中选择一个动作时,状态栏会显示该动作的描述以及确切的分支名称。
答案 2 :(得分:0)
所以我现在想做的是撤消基于master的此基础,我想将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?。