有人能给予一个清晰,简单的方法来交换2个分支的名称与Git,与Github作为远程仓库?
情况是这样的:
1.我在master上创建了一个dev分支。
1.在dev上提交1次后,我创建了分支exp(experiment)。
1.我再次检查了dev,并提交了2次。
1.然后我意识到我真的想让exp成为提交这两个提交的分支,所以我想交换exp和dev
我在这方面是相当新的,我已经通过了一些可视化的Git教程,并搜索了这个网站和谷歌,但我仍然不清楚在Git中解决这个问题的最佳或预期的方法(特别是-使用Github远程仓库)
My Bad attempts to fix this:
我尝试了一些东西,但把它弄得一团糟-用Git扩展重命名本地分支,但无法让远程Github仓库反映出这一变化。我试着创建新分支,但不能总是让这些分支反映在本地和远程(不管我在哪里创建它们)。
我终于能够用Git Extensions的main pull 函数和“Prune remote branches”来获得我所需要的一切,它似乎使用了 fetch 和 --prune -这反映了远程删除回到本地,以及启用了一些强制/删除选项的 push 函数。
一开始我以为我可以重置/移动两个分支(即。将exp上移到dev,然后将exp重置回dev所在的提交(2 back),但是当尝试在Git扩展中重置时,它要求我选择软重置、混合重置或硬重置-这让我停下来并尝试重命名/创建新分支等其他路线。也许这是正确的轨道-如果是这样,我应该做一个软或硬重置-或者在提交任何开放的更改后没有关系?我做了大量的搜索,甚至了解工作目录,索引和分支,它仍然不清楚在我的情况下。
提问
必须有更好的方法来完成这一点-我如何才能轻松地交换两个分支(或重命名两个分支,使它们有效地交换),以一种方式,所有的变化都反映在本地和远程(在Github上)?
我会很感激任何关于为什么你的方法是正确的或最简单的方法的见解。谢谢!
**注意:**我确实发现了this question关于重命名master(或任何分支)的内容-但那里有很多步骤。我可以这样做两次,但我很难相信这是最好的方法。
4条答案
按热度按时间aelbi1ox1#
分别从
exp
和dev
创建两个新分支exp2
和dev2
。删除本地和远程
dev
和exp
分支。从
dev2
创建一个新的本地分支exp
并推送到远程。从
exp2
创建一个新的本地分支dev
并推送到远程。现在,如果一切正常,则删除本地
exp2
和dev2
分支。(可选)vkc1a9a22#
假设提交历史如下所述:
您可以使用以下命令:
那么提交历史将是:
当然,您可以重命名分支名称,但这种方式更有效。
**注意:**如果您与他人合作,且
dev
分支上有新的更改,您可以先通过git pull origin dev
和git checkout -b temp origin/dev
备份新分支上的更改,如temp
。在将本地exp
交换为dev
之后,您可以选择或合并其他开发人员从temp
到dev
的更改。rkue9o1l3#
重命名两个分支只是为了重新定位一些提交,听起来有点像拿起一座房子,旋转它只是为了拧下一个灯泡。
我认为在这里最简单的方法是移动 commits,而不是尝试重命名分支。一个简单的方法是将
dev
中的两个提交选择到exp
上,然后从dev
中删除这两个提交然后从
dev
中删除两个提交:请注意,如果你已经将
dev
推送到GitHub *,并且 * 其他人可能已经拉取了分支,那么你应该恢复这两个提交:这里
A
是第一次提交,B
是第二次提交。请注意,git revert
添加了一个 new commit,在本例中,它将在功能上撤消您想要删除的dev
上的两个提交。所以dev
最终会有三次提交,但就好像现在在exp
上的两次提交从来没有在dev
上进行过一样。mjqavswn4#
这个过程要简单得多,只需要在重命名时使用一个 * 临时 * 分支名称,例如:
todo-dev
:以上所有命令都不受 checkout 分支的影响,并且不影响 working-dir 或 index(与
checkout
,reset
和cherry-pick
命令不同)。整个过程是相同的,无论远程git服务器(即。GitHub、GitLab或只是本地存储库)。