有人可以提供一种清晰、简单的方法来使用 Git 交换 2 个分支上的名称,并将 Github 作为远程存储库吗?
场景如下:
- 我在 master 之外创建了一个 dev 分支。
- 在 dev 上进行 1 次提交后,我创建了分支 exp(实验)。
- 我再次检查了 dev 并进行了 2 次提交。
- 然后我意识到我真的希望 exp 成为进行这 2 次提交的分支,所以我想交换 exp 和 dev
我在这方面还很陌生,我已经阅读了一些可视化的 Git 教程并搜索了这个网站和谷歌,但我仍然不清楚在 Git 中修复这个问题的最佳或预期方法(尤其是 -使用 Github 远程仓库)
My Bad 试图解决这个问题:
我已经尝试了一些方法,但弄得一团糟——使用 Git 扩展重命名本地分支,但无法让远程 Github 存储库反射(reflect)该更改。 我尝试创建新的分支,但不能总是让它们同时反射(reflect)在本地和远程(无论我在哪里创建它们)。
我终于能够通过 Git Extensions main pull 函数和“Prune remote branches”获得我需要的一切,它似乎使用 fetch 和 --prune - 这将远程删除反射(reflect)回本地,以及启用了一些强制/删除选项的push 功能。
一开始我想我可能只能重置/移动两个分支(即将 exp 移至 dev,然后将 exp 重置回 dev 所在的提交(返回 2),但是当尝试在 Git Extensions 中重置时,它要求我选择软重置、混合重置或硬重置——这让我停下来走另一条路,尝试重命名/创建新分支等。也许这是正确的轨道——如果是这样,我应该做一个软重置或硬重置 - 或者在提交任何打开的更改后都不重要?我对此进行了大量搜索,甚至了解工作目录、索引和分支,但在我的情况下仍然不清楚。
问题
必须有更好的方法来完成这项工作 - 我如何轻松地交换两个分支(或重命名 2 个分支以便它们有效地交换),以一种所有更改都在本地和远程(在 Github 上)反射(reflect)的方式?
如果您能深入了解为什么您的方法是正确或最简单的方法,我将不胜感激。谢谢!
注意:我确实找到了this question关于重命名 master(或任何分支)——但是那里有很多步骤。我可以这样做两次,但我很难相信这是最好的方法。
最佳答案
分别从exp
和dev
创建两个新分支exp2
,dev2
。
$ git checkout exp
$ git branch exp2 # create new branch 'exp2' from 'exp'
$ git checkout dev
$ git checkout -b dev2 # create and checkout to `dev2` branch
删除本地和远程的 dev
和 exp
分支。
$ git branch -D dev # delete local 'dev' branch
$ git push origin :dev # delete remote 'dev' branch
$ git branch -D exp # delete local 'exp' branch
$ git push origin :exp # delete remote 'exp' branch
从 dev2
创建一个新的本地分支 exp
并推送到远程。
# make sure you are in 'dev2' branch
$ git checkout -b exp
$ git push origin exp
从 exp2
创建一个新的本地分支 dev
并推送到远程。
$ git checkout exp2 # checkout to 'exp2' so, current branch is 'exp2'
$ git checkout -b dev # create new branch 'dev'
$ git push origin dev # push 'dev' branch to remote
现在,如果一切正常,则删除本地 exp2
和 dev2
分支。 (可选)
$ git branch -D dev2 # delete local 'dev2' branch
$ git branch -D exp2 # delete local 'exp2' branch
关于Git:如何交换本地和远程的 2 个分支 (Github),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45539209/