Git - 忘记切换分支

7

在开始我的项目之前,我忘记切换到一个新分支,现在我需要将我的更改推送到一个新的分支(而不是主分支),以便其他人审查我的工作。我的工作已经完成,但保存在本地主分支中。

我应该如何将我的更改移动到一个新的分支中,这样当我推送它时,它不会干扰主分支,而是创建一个新的远程分支?


你已经提交了所有的工作吗?如果是,那么它只是一个提交还是一系列的提交? - Jake Greene
我相信是这样的,而且它会是一个系列。 - Kim
3个回答

15

首先,由于您已经在本地主分支上完成了所有工作,请创建一个指向本地主分支最新提交的新功能分支。

$ git checkout -b newfeature master

然后将主分支留在服务器(远程)中不变

$ git checkout master
$ git reset --hard origin/master

我只使用GUI(Git Bash会出现错误)。我执行了“创建分支”并选择了“HEAD”,未选中“[ ]切换到新分支”。然后我打开了日志,选择了最新的主条目,并选择了“重置”,然后选择了“硬重置”。查看文件时,我发现我的更改已经消失了,但是当我切换到新分支并要求查看“差异”时,什么也没有显示!它们不应该在那里吗? - Kim
@Kim 我不确定你在GUI中做了什么,这些步骤无论在哪里都是有效的,你可能跳过了某个步骤。如果你只使用GUI,那么我很难帮助你,因为我几乎没有使用git gui的经验,因为我讨厌Tk界面。请记住,分支和标签只是指向提交的指针,Git实际上直到垃圾回收才会删除任何内容。如果你在执行这些步骤时丢失了任何更改,可以查看git relog以恢复之前的提交。 - KurzedMetal
不必使用 checkout 来创建分支,你可以直接使用 git branch newfeature 命令来创建分支,然后只需要执行命令 git reset --hard origin/master 即可。 - Ted M. Young

1

在与主分支相同的位置创建一个新的分支。

检出主分支,并将当前分支硬重置到您想要倒回的提交。


0

我不确定发生了什么事,但是当我按照KurzedMetal的git命令时,它没有给我想要的结果。

所以,我别无选择,只能重新做出改变,尽管我在进行硬重置回到远程主分支之前已备份所有文件,并导出了更改的文件。但是导出和备份都毫无意义,因为它们包含与本地存储库后完全相同的内容,因此我的更改被丢失了。我原以为两者都不会改变。

幸运的是,在开始推送问题之前,我已经将更改藏起来。
注意:硬重置后新创建的文件没有被删除。

以下是我的修复步骤:

  1. 完成您的更改(仍在 主分支
  2. 远程主分支 拉取新的更改并解决任何冲突
  3. TortoiseGit -> Stash save。输入一个与其他存储区区分的消息 -> 确定
  4. TortoiseGit -> Show log。选择最新的主分支,然后右键单击并选择 Reset,然后选择 Hard option -> 确定
  5. TortoiseGit -> Create Branch。输入名称并选中 Switch to new branch 复选框 -> 确定
  6. TortoiseGit -> Stash list。选择您保存的存储区 -> 确定
  7. 现在您会看到一个不同文件的列表。对于每个文件,请比较差异并将更改应用于新重置的文件
  8. 完成后,在本地文件夹内右键单击。您应该在 TortoiseGit 上方看到 Git Commit -> "BranchName" ...,选择第一个
  9. 确认要提交的文件,然后输入适当的描述 -> 确定
  10. 现在您已准备好进行 pushTortoiseGit -> Push,检查本地分支是否为您选择的名称。如果不是,则忘记在第 5 步中切换分支,并从第 6 步继续。

我希望这能帮助到其他人。需要记住的是:在开始新功能/非次要更改时,请切换到新分支。


git stash 只有在你没有提交任何更改时才有效,而你已经声明你已经提交了多次。 - KurzedMetal
我说过“我相信”。你可以猜到,我在使用代码库方面还非常新手。顺便说一下,我已经让Git Bash工作了 - 我所要做的就是使用cd命令导航到我的代码库文件夹,因为Git Bash显然不会在我的代码库文件夹中启动,因此它没有隐藏的“git”文件夹可供检查。 - Kim
如果你想要熟练使用git,我建议你阅读在线Pro Git书籍。这本书篇幅短小,有清晰的图表展示git如何处理你的数据,易于理解。在我刚开始学习时,它帮助了我很多。 - KurzedMetal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接