如何从远程仓库中的 master 删除 GIT 分支并从另一个分支启动新分支?
Posted
技术标签:
【中文标题】如何从远程仓库中的 master 删除 GIT 分支并从另一个分支启动新分支?【英文标题】:How to delete GIT branch from master in remote repo and start a new branch from another branch? 【发布时间】:2021-05-04 07:10:24 【问题描述】:我不小心从 origin 的 master 分支创建了一个新分支,并将我的更改提交到该分支。
让我们调用我创建的新分支Accidental_Branch
。
但我应该从另一个分支创建新分支,比如说Feature_Branch
。 Master 分支不是最新的,我的团队将所有更改提交到 Feature_Branch
,我应该从中创建新分支。这就是我想要的。
删除我创建的分支,即Accidental_Branch
。我不想丢失我在本地所做的更改,因为我想使用该更改创建一个新分支。
从Feature_Branch
创建一个新分支。并提交更改。更改含义,我已提交给Accidental_Branch
的更改以及我未提交的本地更改。
请帮帮我。我是 GIT 新手。
【问题讨论】:
如果我的问题没问题,Git 会为此提供Branch Rebasing。根据您的问题,我想说的是从Master
(或master
,从您的问题中不完全清楚)将Accidental_Branch
重新设置为Feature_Branch
。那就是您自 Accidental_Branch
中的 Master 以来所做的任何更改(提交)都会重新基于 Feature_Branch
之上。然后,您可以重命名Accidental_Branch
(或将其名称保留为假定它不是真实姓名中的“意外”并且真实姓名已经合适)。
【参考方案1】:
如果您不想丢失未提交的数据,您可以使用$ git stash
命令暂时但安全地保存数据。这会将数据存储在一个隐藏的地方。
之后,您可以在分支之间切换或使用$ git checkout -b new_branch_name
创建新分支
现在,您将登陆新分店。在此分支中,您可以获取使用$ git stash apply
命令之前隐藏的数据。
之后,您可以使用以下命令安全地删除之前创建的分支:
要删除本地分支,请使用以下命令:
$ git branch -d branch_name
您可以使用 -D 选项强制删除分支,如下所示:
$ git branch -D branch_name
您可以使用以下命令删除远程分支:
$ git push origin --delete branch_name
看看这是不是你要找的。但是您在问题中也说过您已对分支进行了更改。如果您已提交更改,则存储将不起作用。在这种情况下,请稍微澄清一下您的问题。如果您能在问题中说明分支名称,那就太好了。
【讨论】:
发问者不想丢失的意外分支中的更改在哪里?在您的示例中,只需删除此分支git branch -d branch_name
即可删除这些更改,而提问者不会这样做...
我已经更新了答案。但是提问者说他已经提交了对分支的更改。在这种情况下,git stash 将不起作用。
是的,当然,问题还不够清楚……
@Ankush Chavan 我已经编辑了问题以使其清楚。我希望你现在了解我的情况。是的,我已经提交了我的原始更改,并且我的本地也有一些未提交的更改。我应该如何进行?【参考方案2】:
要保存未提交的更改,您可以使用git stash save "optional stash-message"
生成stash(兑现所选文件)。
这样您就可以缓存您的文件,而不会丢失它们。在git stash
之后可以通过git branch -d <branch_name>
本地删除意外生成的分支,远程删除git push origin --delete <branch_name>
。
签出您将在其中启动新分支的分支 (git checkout <branch_name>
) 并使用 git branch <branch_name>
在其中创建您的 new 分支,并按照上述说明进行检查,然后将生成的存储应用到git stash apply stash@0
.
git stash
的工作原理在此 website-blog 上进行了简单说明。
编辑,为什么问题不是很清楚:
如果您意外分支中的更改已经推送到远程服务器,那么git stash
不起作用。在这种情况下,您必须 revert 提交,其中包括您不想丢失的更改。 git revert
命令将创建具有相反效果的新更改,从而撤消指定的旧提交,因此更改再次可用且不会丢失。
在git revert
之后,您在工作目录中有更改的文件,您可以创建新分支。如果新分支从另一个分支开始,您必须再次stash 未提交的文件,创建并签出新生成的分支,并在此分支中应用 stash,如上所述。
【讨论】:
我已将更改推送到远程服务器。我想撤消它,也不想在我的本地丢失这些更改。请告诉我我的理解是否正确:我必须先存储所有更改。然后恢复我在遥控器中所做的提交。从我需要的分支创建一个新分支并应用存储。然后将更改提交到 origin 中的新分支并删除我创建的意外分支。对吗? 第一个git revert
是用于恢复原点的更改,对吗?那么第二个git revert
是干什么用的?
在git revert
之前,您必须先存储更改的文件(对于本地未提交的更改)。然后git revert
,然后再次存储来自 git revert 的文件(现在你有 2 个存储(使用 git stash list 显示所有存储))。然后签出您将启动新分支的分支,创建新分支并签出新分支。然后应用两个存储,你将在新分支中拥有所有更改的文件!
好的,知道了。谢谢你。你救了我的命:)【参考方案3】:
您可以将创建的提交重新定位到您想要的位置。
根据有多少,手动创建一个新分支可能更容易,一次挑选一个并删除旧分支。
【讨论】:
以上是关于如何从远程仓库中的 master 删除 GIT 分支并从另一个分支启动新分支?的主要内容,如果未能解决你的问题,请参考以下文章