在开始我的项目之前,我忘记切换到一个新分支,现在我需要将我的更改推送到一个新的分支(而不是主分支),以便其他人审查我的工作。我的工作已经完成,但保存在本地主分支中。
我应该如何将我的更改移动到一个新的分支中,这样当我推送它时,它不会干扰主分支,而是创建一个新的远程分支?
在开始我的项目之前,我忘记切换到一个新分支,现在我需要将我的更改推送到一个新的分支(而不是主分支),以便其他人审查我的工作。我的工作已经完成,但保存在本地主分支中。
我应该如何将我的更改移动到一个新的分支中,这样当我推送它时,它不会干扰主分支,而是创建一个新的远程分支?
首先,由于您已经在本地主分支上完成了所有工作,请创建一个指向本地主分支最新提交的新功能分支。
$ git checkout -b newfeature master
然后将主分支留在服务器(远程)中不变
$ git checkout master
$ git reset --hard origin/master
git gui
的经验,因为我讨厌Tk界面。请记住,分支和标签只是指向提交的指针,Git实际上直到垃圾回收才会删除任何内容。如果你在执行这些步骤时丢失了任何更改,可以查看git relog
以恢复之前的提交。 - KurzedMetalgit branch newfeature
命令来创建分支,然后只需要执行命令 git reset --hard origin/master
即可。 - Ted M. Young在与主分支相同的位置创建一个新的分支。
检出主分支,并将当前分支硬重置到您想要倒回的提交。
我不确定发生了什么事,但是当我按照KurzedMetal的git命令时,它没有给我想要的结果。
所以,我别无选择,只能重新做出改变,尽管我在进行硬重置回到远程主分支之前已备份所有文件,并导出了更改的文件。但是导出和备份都毫无意义,因为它们包含与本地存储库后完全相同的内容,因此我的更改被丢失了。我原以为两者都不会改变。
幸运的是,在开始推送问题之前,我已经将更改藏起来。
注意:硬重置后新创建的文件没有被删除。
以下是我的修复步骤:
TortoiseGit -> Stash save
。输入一个与其他存储区区分的消息 -> 确定TortoiseGit -> Show log
。选择最新的主分支,然后右键单击并选择 Reset
,然后选择 Hard option
-> 确定TortoiseGit -> Create Branch
。输入名称并选中 Switch to new branch
复选框 -> 确定TortoiseGit -> Stash list
。选择您保存的存储区 -> 确定TortoiseGit
上方看到 Git Commit -> "BranchName" ...
,选择第一个push
。 TortoiseGit -> Push
,检查本地分支是否为您选择的名称。如果不是,则忘记在第 5 步中切换分支,并从第 6 步继续。我希望这能帮助到其他人。需要记住的是:在开始新功能/非次要更改时,请切换到新分支。
git stash
只有在你没有提交任何更改时才有效,而你已经声明你已经提交了多次。 - KurzedMetalGit Bash
工作了 - 我所要做的就是使用cd
命令导航到我的代码库文件夹,因为Git Bash
显然不会在我的代码库文件夹中启动,因此它没有隐藏的“git”文件夹可供检查。 - Kim